【问题标题】:firefox sdk: redefine content-script functionfirefox sdk:重新定义内容脚本功能
【发布时间】:2014-09-09 08:51:57
【问题描述】:

我有 firefox 插件,它会向所有页面注入两个内容脚本。

var workers = [];

pageMod.PageMod({
  include: "*",
  contentScriptFile: [
       self.data.url("content/autofill/lib_generic.js"),
       self.data.url("content/autofill/lib.js"),
    ],
  // add worker to the list
  onAttach: function(worker)
      {
        workers.push(worker);

        var filename = getDomainSpecificFilename(worker.contentURL);

        worker.on("detach", function()
        {
          var index = workers.indexOf(worker);
          if (index >= 0)
            workers.splice(index, 1);
        });
      }
});

lib_generic.js 包含一个名为apply_forms(...) 的函数(其描述并不重要)。该函数从lib.js 文件中调用。但此过程不适用于多个页面,因此对于每个这样的页面,我都有一个特定的脚本 - 这些文件也只包含一个名为 apply_forms(...) 的函数。

我有一个函数,它将当前域作为输入并返回所需特定脚本的名称或 false 如果应该使用泛型。

我需要的是 - 在必要时 - 用特定的 apply_forms 重新定义通用 apply_forms

我试过了

tabs.activeTab.attach({
    contentScriptFile: [ filename ]
});

worker.port.emit("apply_forms_loaded");

在内容脚本之一中:

var apply_forms_loaded = false;

self.port.on("apply_forms_loaded", function() {
    console.log("LOADED");
    apply_forms_loaded = true;
});

整个过程是这样开始的:

var timer;

timer = setInterval(function(){

  if (apply_forms_loaded) {

    clearInterval(timer);
    start(); // apply_forms is called somewhere inside this call
  }
}, 10);

不幸的是,tabs.activeTab.attach 似乎在不同的上下文中注入了内容脚本,因此总是调用通用函数。

我可以做些什么来说服activeTab 在相同的上下文中添加内容脚本,还是应该以不同的方式来做? (那是哪一个)

或者问题可能出在 - 我不知道 - 当我发送 apply_forms_loaded 消息时内容脚本没有完全注入?

我一直在尝试为 Chrome 重新定义函数定义,并且我已经成功了 (url to SO question)

感谢您的建议。

【问题讨论】:

    标签: javascript firefox firefox-addon firefox-addon-sdk content-script


    【解决方案1】:

    没错,通过 pagemod 添加的脚本与 tabs.attach 添加的脚本位于不同的 JS 沙箱中。您可以做的是使用新的 exportFunction() 函数将函数注入实际窗口 - 这样该函数就在实际窗口中并且总是会被覆盖。然后你可以从 unsafeWindow 调用它..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      相关资源
      最近更新 更多