【问题标题】:interaction between 2 xul windows in extension/addon?扩展/插件中2个xul窗口之间的交互?
【发布时间】:2014-03-30 21:05:07
【问题描述】:

好的,我有 2 个 xul 窗口,

window_2
<label id="#label_id" value="button has been clicked!">

window_1
[button]---> clicked--> $("#label_id).attr("value","clicked again!");

当在 xul 中的 window_1 上按下按钮时,我想更改 window_2 的样式(标签文本),我使用的是 jquery,这似乎不起作用,我该如何解决这个问题?

【问题讨论】:

  • 你是如何在扩展中使用 jquery 的?我不明白。 jquery 仅适用于 html 文档范围。
  • jquery 可以在扩展中工作,除了 ajax 请求没有限制。
  • 你能分享你的工作吗?我有兴趣看看 jquery 如何与 xul 一起使用,我认为框架还没有准备好,需要做很多工作来调整
  • 没什么,只需将 jquery 库添加到您的 xul 窗口中,就像任何其他 html 文档一样并进行操作。
  • 在旁注中,我不断重新启动 firefox 以测试我的扩展程序,有什么办法不缓存 xul 或 javascript 代码吗? Nglayout.debug.disable xul 缓存在 firefox 30 的配置选项中不可用

标签: jquery firefox firefox-addon xul xpcom


【解决方案1】:

你需要的是获取另一个窗口的窗口对象。我可以想到一些快速的方法来做到这一点:

  1. 创建一个模块并使用它来共享每个窗口的窗口对象:

    MyWindowModule.jsm

    const EXPORTED_SYMBOLS = ["MyWindowModule"];
    var MyWindowModule = {
        window1: null,
        window2: null
    }
    

    window1.js

    Components.utils.import("resource://myextension/modules/MyWindowModule.jsm");
    MyWindowModule.window1 = window;
    

    window2.js

    Components.utils.import("resource://myextension/modules/MyWindowModule.jsm");
    MyWindowModule.window2 = window;
    

    那么就可以在window1中使用了:

    MyWindowModule.window2.$("#label_id).attr("value","clicked again!");
    
  2. 使用nsIWindowMediator查找其他窗口或other窗口之间的通信方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    相关资源
    最近更新 更多