【问题标题】:Why doesn't ContentScriptFile work in PageMod?为什么 ContentScriptFile 在 PageMod 中不起作用?
【发布时间】:2023-03-15 13:03:01
【问题描述】:

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

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?) 文件路径资源://jid1-ktaxagdysynpew-at-jetpack/extension/data/testPreload.js

【问题讨论】:

  • 数据目录下是否有testPreload.js文件?看起来您可能会将它放在 lib 目录中。你能给出你的文件的布局吗? ls -R
  • 哦,是的,他确实在 lib 目录中。所以如果我想从 self.data.url 引用,我不能使用 lib dir?
  • 不,如果你想使用 self.data 获取资源 uri,内容脚本必须在数据目录中。
  • 布莱恩:你应该回答这个问题。

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


【解决方案1】:

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

同样,只需将您的:lib/testPreload.js 移动到 data/testPreload.js,这应该可以解决问题。

【讨论】:

  • 不想将脚本移动到数据目录怎么办?如果我宁愿将它保留在 XPI 的根目录中?发送。
  • 设法使用我制作的一个讨厌的、讨厌的黑客来做到这一点:gist.github.com/urig/828ddc85e3fd0b79327e
【解决方案2】:

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

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

【讨论】:

  • 你必须说“数据”(小写),而不是“数据”
【解决方案3】:

代替:

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

用途:

contentScriptFile: "resource://<your_extension_name>/testPreload.js",

self.Data.url() 是一个函数,给定文件路径将返回文件的完整 URI 路径,假设它位于您的插件的 data 文件夹下。

如果您更喜欢将文件放在包的根目录下,您可以按照上面的示例自行构建 URI 路径。只需将 &lt;your_extension_name&gt; 替换为您在其 package.json 文件中为插件指定的实际名称即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 2018-11-12
    • 2021-09-14
    • 2019-04-29
    相关资源
    最近更新 更多