如何允许插件的内容脚本从当前选项卡访问Javascript变量?

时间:2014-02-21 01:33:05

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

假设我的插件必须从网页访问Javascript变量。我们来看https://mozilla.org。有一个名为optimizelyCode的全局变量。我的插件只有在可以访问此变量时才有效。

如何让我的pageMod这样做?

要进行实验,这里有一些教程脚本:

var widgets = require("sdk/widget");
var tabs = require("sdk/tabs");

var widget = widgets.Widget({
  id: "mozilla-link",
  label: "Mozilla website",
  contentURL: "http://www.mozilla.org/favicon.ico",
  onClick: function() {
    tabs.activeTab.attach({
      contentScriptWhen: 'end',
      contentScript:
        'console.log(optimizelyCode)'
        })
    }
});

var pageMod = require("sdk/page-mod");

pageMod.PageMod({
  include: "*.mozilla.org",
  contentScriptWhen: 'end',
  contentScript: 'console.log(optimizelyCode);'
});

我收到引用/未定义错误,因为optimizelyCode不适合添加。在这个例子中,我甚至没有使用内容脚本文件。

据我所知,我只能访问getElementById这类方法的基本DOM内容。如何访问这些网页本地JS变量?

参考:https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts/Loading_Content_Scripts

2 个答案:

答案 0 :(得分:2)

仅供参考,非内容脚本你可以做gBrowser.contentWindow.wrappedJSObject.VAR_HERE

答案 1 :(得分:1)

由于这是附加SDK,因此它使用与Firefox其余部分不同的语法,您需要使用unsafeWindow.optimizelyCode