首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JavaScript对象初始化为全局对象,然后在Iframe中使用

问将JavaScript对象初始化为全局对象,然后在Iframe中使用
EN

Stack Overflow用户
提问于 2021-08-18 01:44:24
回答 1查看 51关注 0票数 0

我有一个需要初始化的类。

代码语言:javascript
复制
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客户端。

我想知道,有没有办法让初始化一次(也许在父级中),让其余的I帧只调用ROS.topic_publisher("x_param', '0.1'),而不需要重新导入或重新初始化ROS.init()。

我也尝试使用parent.object。所以它是这样的:

在父页面上:

代码语言:javascript
复制
var obj = ROS.init();
ROS.topic_publisher("x_param', '0.1'); // success

在Iframe页面上:

代码语言:javascript
复制
var obj = parent.obj;
obj.ROS.topic_publisher("x_param', '0.1'); // error 

任何信息都会有帮助..。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-18 02:26:27

有几个问题。第一个问题是,class与function不同,它不会创建全局绑定,因此parent.ROS不会找到任何内容。第二个小问题是,您需要在每个窗口中加载ROSLIB。第三,这里的init并不是真正必要的,除非有更多的东西--一个简单的静态声明就可以了。

像这样的东西可能会缓解所有这些问题。(注意:代码未经测试;我不知道ROSLIB是什么)

代码语言:javascript
复制
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,而是只在顶部的帧中。(我相信这是我误解的原始概念。)这更好,并且只需要对代码进行很小的修改:

代码语言:javascript
复制
// only in top window
window.ROS = class ROS {
  ...
};
ROS.init();

然后,您可以在任何窗口中使用top.ROS.topic_publisher(...)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68825663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档