关键词:
【中文标题】将 JavaScript 对象初始化为全局对象,然后在 Iframe 中使用【英文标题】:Initialize JavaScript object as global object for then use in Iframe 【发布时间】:2021-10-19 20:28:09 【问题描述】:我有一个需要初始化的类。
class ROS
static init()
// do ros initialization
ROS.ros = new ROSLIB.Ros(
url: 'ws://' + ROS.host + ':' + ROS.ws_port.toString()
);
// and so on
static topic_publisher(topic_name, msg)
var topic = new ROSLIB.Topic(
ros: ROS.ros,
name: topic_name,
);
topic.publish(msg);
如果我想向某个主题发布消息(调用topic_publisher
),我只需要这样做ROS.topic_publisher("x_param', '0.1')
。
但是,在那些受人尊敬的页面中,应该有一个已经调用 ROS.init()
的脚本(我导入的所有 scripts.js
中至少有一个)。
我设计的网页由 4 个iframes
和 1 个parent
组成。假设他们都需要使用ROS.topic_publisher("x_param', '0.1')
。
在当前设计中,我需要在所有页面中调用ROS.init()
。它使服务器拥有 5 个 ROS 客户端。
我想知道,我是否可以让初始化一次(可能在父级中)并让其余的我框架只调用 ROS.topic_publisher("x_param', '0.1')
而无需重新导入或重新初始化 ROS.init()
。
我也尝试使用parent.object
。于是就变成了这样:
在父页面上:
var obj = ROS.init();
ROS.topic_publisher("x_param', '0.1'); // success
在 iframe 页面上:
var obj = parent.obj;
obj.ROS.topic_publisher("x_param', '0.1'); // error
任何信息都会有所帮助...谢谢!
【问题讨论】:
所有 iframe 是否都与父级同源? 不应该是parent.ROS.topic_publisher
吗?因为ROS.init
不返回任何东西obj
将只是未定义且毫无意义...您可以在父级中执行ROS.init()
@Amadan 是的,所有 Iframe 都位于同一页面上。同一个地方(在服务器中)。
@Bravo 尝试但仍然无法正常工作,我还确保首先完成 parent
页面,然后加载 Iframe
(以确保 web-socket 连接)。
still not works
- 你还没有描述发生了什么让你说“它不起作用” - 你有错误吗?你不应该打电话给parent.ROS.init
- 所以我希望你不需要
【参考方案1】:
有几个问题。第一个是,AFAIK,不像function
,class
不创建全局绑定,所以parent.ROS
不会找到任何东西。第二个小问题是您需要在每个窗口中加载ROSLIB
。第三,这里的init
不是必需的,除非还有更多内容——一个简单的静态声明就可以了。
这样的事情可能会缓解所有这些问题。 (注:代码未经测试,不知道ROSLIB是什么)
window.ROS = class ROS
static ROSLIB = top.ROSLIB;
static ros = top.ROS?.ros ?? new this.ROSLIB.Ros(...);
static topic_publisher(topic_name, msg)
const topic = new this.ROSLIB.Topic(...);
topic.publish(msg);
请注意,只有当top
的来源与子窗口的来源相同时,所有这些才有效。如果没有,您将不得不改用postMessage
。
编辑:另一个想法是在每一帧中没有ROS
,而只是在顶部。 (我相信这是我误解的原始概念。)这更好,并且只需要对代码进行微小的修改:
// only in top window
window.ROS = class ROS
...
;
ROS.init();
那么你就可以在任何一个窗口中使用top.ROS.topic_publisher(...)
了。
【讨论】:
"等等" 建议初始化还有更多内容:p 另外,如果从 iframe 调用 ROS.xxx,您确定需要 iframe 中的 ROSLIB 吗?似乎 ROS.xxx 会在父窗口上下文中执行 @Bravotopic_publisher
在当前上下文中执行,如果没有ROSLIB
引用,您将无法实例化ROSLIB.Topic
....但这给了我一个想法:) 至于init
,相同的结构将适用于 init
函数——我只是想展示一个替代方案。
我知道,但是类 ROS 代码只存在于父级中,并且在父级中执行不是吗? ROSLIB 存在于哪里?
啊。我误会了。
原始代码永远不会 obj = new ROS()
- 所以不知道你为什么添加它:p将 JSON 反序列化为 JavaScript 对象
】将JSON反序列化为JavaScript对象【英文标题】:DeserializingaJSONintoaJavaScriptobject【发布时间】:2011-09-2303:36:00【问题描述】:我在使用AJAX访问的Java服务器应用程序中有一个字符串。它看起来像下面这样:varjson=["adjacencies":["nodeTo":"g... 查看详情
将包含 C 样式数组的对象初始化为成员变量 (C++)
】将包含C样式数组的对象初始化为成员变量(C++)【英文标题】:InitializeobjectcontainingC-stylearrayasmembervariable(C++)【发布时间】:2018-11-0514:36:39【问题描述】:考虑以下代码:structColor//Thisstructcan\'tbemodifieddoublegrey;doublergb[3];;intmain()dou... 查看详情
如何将@NSManaged 对象类中的变量初始化为 JSON 值?
】如何将@NSManaged对象类中的变量初始化为JSON值?【英文标题】:howtoinitialisevariablesin@NSManagedobjectclassasaJSONvalue?【发布时间】:2018-06-1116:47:53【问题描述】:我想像变量“Item2”类一样初始化“Item”类中的变量这是“项目”类:-... 查看详情
我应该总是/永远/从不将对象字段初始化为默认值吗?
】我应该总是/永远/从不将对象字段初始化为默认值吗?【英文标题】:ShouldIalways/ever/neverinitializeobjectfieldstodefaultvalues?【发布时间】:2009-03-1119:59:52【问题描述】:此处的代码样式问题。我查看了this问题,该问题询问.NETCLR是否... 查看详情
将对象序列化为 JSON
...toJSON【发布时间】:2010-10-0804:40:50【问题描述】:如何在JavaScript中?【问题讨论】:【参考方案1】:您正在寻找JSON.stringify()。【讨论】:将JSON.stringify()与包含数组的javascript对象一起使用有一点好处。请检查我的问题:***.com/qu... 查看详情
读书笔记-javascript中的全局对象
对于任何JavaScript程序,当程序开始运行时,JavaScript解释器都会初始化一个全局对象以供程序使用。这个JavaScript自身提供的全局对象的功能包括:1.全局对象拥有一些常用的属性值。比如undefined、Infinity以及NaN。2.全局对象拥有一... 查看详情
将 XML 序列化为对象
】将XML序列化为对象【英文标题】:SerializingXMLtoobjects【发布时间】:2011-04-1311:41:15【问题描述】:为了将我们的关系数据映射到对象,我们返回XML数据并反序列化为对象。为了使用这种方法,被反序列化的对象需要有一个公共... 查看详情
.NET Core 对象 JSON 序列化为 Javascript 格式
】.NETCore对象JSON序列化为Javascript格式【英文标题】:.NETCoreObjectJSONSerializationtoJavascriptformat【发布时间】:2018-06-1203:24:41【问题描述】:我在将C#对象序列化为纯JSON字符串时遇到了一些问题。我使用JsonConvert(Newtonsoft的)将模型... 查看详情
将对象数组重新格式化为键数组
...ays【发布时间】:2018-04-2718:36:26【问题描述】:所以我对Javascript有点陌生,但我正在尝试将startArray重新格式化为endArray。startArray基本上是一个订单对象数组,它们总是有不同的orderId,但可以有相同的companyId。我基本上是在尝试... 查看详情
c++中,类内的成员变量自动初始化为零吗,而全局变量随意赋值
如果该对象是全局的话,其成员中的内置类型就会自动初始化对应的默认值(像整形就为0)和调用构造函数初始化,如果是局部的话只会调用默认构造函数赋值,构造函数中没有涉及到的成员,并不会赋值。参考技术A调试分析... 查看详情
无法初始化全局对象
】无法初始化全局对象【英文标题】:CannotinittheGlobalobject【发布时间】:2015-06-2620:27:31【问题描述】:我正在将Play2.3项目转换为Play2.4,并将之前的Global对象替换为ErrorHandler,如迁移指南中所述。但是,当我尝试运行该项目时,... 查看详情
将 ES6 类对象序列化为 JSON
...。我能想到的一种简单方法是,因为每个成员实际上都是javascript对象(数组等)。我想我可以维护一个变量 查看详情
将 JavaScript 日期初始化为午夜的最佳方法是啥?
】将JavaScript日期初始化为午夜的最佳方法是啥?【英文标题】:WhatisthebestwaytoinitializeaJavaScriptDatetomidnight?将JavaScript日期初始化为午夜的最佳方法是什么?【发布时间】:2011-04-2302:00:53【问题描述】:获取newDate()实例但将时间设... 查看详情
全局数据/对象的 Javascript 存储/状态
】全局数据/对象的Javascript存储/状态【英文标题】:Javascriptstoring/stateofglobaldata/object【发布时间】:2012-03-2723:12:45【问题描述】:有没有办法将全局数据存储在window对象中,这样数据可以在页面重新加载/刷新后继续存在。所以... 查看详情
jvm笔记4-对象的创建
1.对象的创建过程: 1.new类名 2.根据new的参数在常量池中定位一个类的符号的引用。 3.如果没找到这个符号的引用,说明类还没有被加载。则进行类的加载,解析和初始化 4.虚拟机为对象分配内... 查看详情
对象复活的用法
】对象复活的用法【英文标题】:Usagesofobjectresurrection【发布时间】:2011-04-1011:10:41【问题描述】:我的.NETWindows服务应用程序存在内存泄漏问题。因此,我开始阅读有关.NET中的内存管理的文章。我在oneofJeffreyRichterarticles中发现... 查看详情
JSON 对象未正确格式化为 Javascript
】JSON对象未正确格式化为Javascript【英文标题】:JSONObjectnotcorrectformattedintoJavascript【发布时间】:2020-11-0503:44:20【问题描述】:我想在JavaScript中使用JSON对象作为键->值数组,但我不明白为什么它没有以我想要的方式返回我的... 查看详情
无法将 JSON 数组反序列化为 C# 对象 [关闭]
...4:24【问题描述】:我有一个HTML页面和一些进行AJAX调用的Javascript代码。在我的API(C#)的服务器端,我收到一个JSON数组,如下所示,它最多可以有60个元素。对于每个元素,我都映射了一个类对象。但是我无法将数组反序列化为任... 查看详情