【问题标题】:Firefox extension js object initialization火狐扩展js对象初始化
【发布时间】:2010-05-06 23:58:38
【问题描述】:

注意:这是关于 Firefox 扩展的问题,不是 js 一般问题。

在 Firefox 扩展项目中,我需要在每个 Firefox 窗口中只初始化一次我的 javascript 对象。否则,每次我打开我的窗口时,都会使用一个新的计时器,将使用新的属性,所以一切都将从头开始。

希望下面的例子能揭开我的问题的神秘面纱:)

var StupidExtension
{
    statusBarValue: "Not Initialized Yet",
    startup: function ()
    {
    ...
    // Show statusBarValue in Status Bar Panel
    },
    initTimerToRetrieveStatusBarValueFromNetwork: function ()
    {
    ...
    }   
}

所以每次按下 Ctrl+N 时,您都会看到“尚未初始化”,然后会触发新的计时器,因此一段时间后它会从网络检索数据,您还会在第二个窗口中看到值,依此类推.理想情况下,只有一个计时器函数运行并更新所有 Firefox 窗口中的所有状态栏面板。

当然我可以做一些缓存,比如将值保存在首选项或其他存储中,然后从那里显示它。但我觉得这是人为的。

那么问题将是在所有 Firefox 窗口实例中是否存在将对象的某些部分设为静态的“本机”技术?

【问题讨论】:

  • “我的 javascript 对象需要在每个 Firefox 窗口中初始化一次。” - 你的意思是所有窗口一次,而不是每个窗口一次。这首先让我感到困惑。

标签: javascript firefox object initialization


【解决方案1】:

https://developer.mozilla.org/en/Working_with_windows_in_chrome_code#Advanced_data_sharing

在所有窗口中导入一个 js 模块(您需要编写该模块)。这为您提供了一个在所有人之间共享的对象。

在模块中实现定时器代码并使用标准observer service向所有窗口发送通知(每当需要更新窗口时,定时器回调调用.notify(),每个窗口都有一个使用@987654324注册的观察者@) 或在从 jsm 导出的对象上实现自己的 addObserver/removeObserver 方法。

【讨论】:

  • 没错,就像魅力一样!很抱歉造成混淆。斯帕西博大喇叭 :)
【解决方案2】:

如果在您的 chrome 清单文件中有类似的内容:

 overlay chrome://browser/content/browser.xul chrome://path/to/youroverlay.xul

并且该叠加层包含到 somejsfile.js

在 somejsfile.js 你有这个:

var myExtension = {
    statusBarValue: "Not Initialized Yet",
    startup: function startup(){
     // Show statusBarValue in Status Bar Panel
     },
}

window.addEventListener("load", function() { myExtension.startup(); }, false);

假设我刚才所说的一切,当用户打开一个新窗口时,将为每个窗口运行启动,并且 statusBarValue 应该是“尚未初始化”,无论它在另一个窗口中是什么。

因为您正在覆盖 browser.xul,并且每个窗口都有自己的...每个窗口都有自己的扩展版本。 (请注意,这是一个新窗口,而不是新标签页。)

所以是的,您可能必须使用与您提到的类似的技术以某种方式同步它们。

【讨论】:

  • 那是关于外观的部分。我还看到了每次更新 UI 元素时都会枚举所有浏览器窗口并为所有这些窗口提供函数 applied 的技术。不确定这有多有效。还有一点 - 静态成员怎么样,会有帮助吗?功能部分怎么样,比如我有一个定期检索某些东西的功能,我只想定期运行该功能的 1 个实例?
猜你喜欢
  • 2010-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多