Firefox 从Mozilla插件SDK中注入的pagescript调用函数

Firefox 从Mozilla插件SDK中注入的pagescript调用函数,firefox,firefox-addon-sdk,Firefox,Firefox Addon Sdk,我试图将一个函数注入网页并调用它,但是无论我如何尝试,每当我尝试调用该函数时,我都会发现它是未定义的。我知道浏览器会在页面加载时读取函数定义,以后不会这样做,但有没有办法及时插入函数。我想插入一个垃圾函数: function makeAlert(word){ alert(word); } 我试着按原样注入它,用标签将它附加到正文中,然后使用将它附加到带有page mod的头部中。但是,无论我做什么,如果我尝试调用页面上的函数(使用注入内容脚本),该函数将被标记为未定义。以下是我认为可行

我试图将一个函数注入网页并调用它,但是无论我如何尝试,每当我尝试调用该函数时,我都会发现它是未定义的。我知道浏览器会在页面加载时读取函数定义,以后不会这样做,但有没有办法及时插入函数。我想插入一个垃圾函数:

function makeAlert(word){
    alert(word);
}
我试着按原样注入它,用
标签将它附加到正文中,然后使用
将它附加到带有page mod的头部中。但是,无论我做什么,如果我尝试调用页面上的函数(使用注入内容脚本),该函数将被标记为未定义。以下是我认为可行的基本代码:

在main.js中

pageMod.PageMod({
  include: "*",
  contentScriptFile: self.data.url("makeAlert.js")
  });
编辑:由于我想做的似乎不可能,我的简单问题是——我可以调用我从注入的pagescript编写的函数吗

出于安全原因,内容脚本(大部分)与网页分开保存,请参见

如果你真的想这样做,你可以改为:

unsafeWindow.makeAlert = function (word){
    alert(word);
}
以这种方式做事有两件重要的事情:

  • 不安全的窗户是不安全的。永远不要相信任何来自非安全窗口的数据
  • 它将在今年某个时候消失(不确定确切的时间)
  • 您可能应该改为使用从网页到内容脚本的postMessage来传递mesages。有关如何安全操作的更多信息,请阅读以下文档:


    我知道post message,但我想做的是在pagescript中嵌入一个从同一个pagescript调用的函数:例如,注入类似:
    的内容,并使其能够找到
    一个InjectedFunction()
    我不建议这样做,这是一个安全隐患。如果页面上的另一个脚本在你创建函数后重新定义了你的函数来做一些不好的事情呢?我一直认为我的函数覆盖页面函数的机会有限,而不是相反。也许我问错了问题。我将把它改为“如何调用我从注入的pagescript编写的任何函数”