为什么ContentScriptFile不能在PageMod中运行?

时间:2014-03-26 09:25:21

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

我尝试在页面上注入内容脚本并使用

console.log("starting addon");
pageMod.PageMod({
    include: "*",//tempopary
    contentScriptFile: self.data.url("testPreload.js"),
    contentScriptWhen: 'start'});

testPreload.js:

console.log('testPreload');

我看到"开始插入"在日志中,如果我使用contentScript:"console.log('testPreload')"而不是contentScriptFile,我也会看到" testPreload"。

但是当我使用contentScriptFile时,我会看到"启动插件"但不是" testPreload"。我做错了什么?

修改 错误:Error opening input stream (invalid filename?) filePath资源://jid1-ktaxagdysynpew-at-jetpack/extension/data/testPreload.js

3 个答案:

答案 0 :(得分:4)

您希望将testPreload.js文件移至data目录。 self.data模块实际上引用了该目录,因此self.data.url()函数为您提供了该目录中文件的有效URL。仅供参考这些网址看起来像resource://[your-jetpack-id]/data/[file])

再次,只需将您的lib/testPreload.js移至data/testPreload.js即可解决问题。

答案 1 :(得分:2)

您的contentScript文件应位于数据目录中,以便能够通过self.data.url('scriptname')访问它 将您的testPreload.js移至数据目录。

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

答案 2 :(得分:0)

而不是:

getA(param)
  .then(function (A) {
    getB(A)
      .then(function (B) {
        getC(A, B)
      });
  });

使用:

contentScriptFile: self.data.url("testPreload.js"),

contentScriptFile: "resource://<your_extension_name>/testPreload.js", 是一个函数,给定文件路径将返回文件的完整URI路径,假设它位于加载项的self.Data.url()文件夹下。

如果您希望将文件放在软件包的根目录下,则可以自己构建URI路径,如上例所示。只需将data替换为您在<your_extension_name>文件中为加载项提供的实际名称。