当标签 url 属于文件系统时,访问 contentScript 文件时出现问题

issue accessing the contentScript file when the tab url belongs to the file system

以下是 "main.js" 代码的片段。

我的问题是,当我使用 "option 1" url 时,代码运行良好 但是当我使用 "option 2" url 时,标记为导出的函数 在 "content-script.js" 上(将在 "page.html" 上看到)在 "page.html".

上看不到

我拥有导出和交流内容所需的所有代码。 关键点就在 pageUrl 格式上。好像有 使用以下格式的文件系统 url 时会出现一些问题:

"file:///D:/page.html"

在上述情况下 (file://) "contentScriptFile" 由于某种原因未包括在内。

火狐的安全配置需要修改吗? 例如:"about:config" area?

有什么想法吗?

// [option 1] pageUrl = "http://localhost:81/firefox_addon/page.html";
// [option 2] pageUrl = "file:///D:/page.html";

tabs.open({
    url: pageUrl,
});

var pageMod = pageMods.PageMod({
    include: ["*"],
    contentScriptFile: self.data.url("content-script.js"),
    onAttach: startListening
});

我知道内容脚本与原始文档本身包含的脚本没有同源策略,但是可能是同源策略由于 file:// URI 的敏感性而应用。

您可以尝试在 about:config 中将 security.fileuri.strict_origin_policy 设置为 false。

您可以在 https://developer.mozilla.org/en-US/docs/Same-origin_policy_for_file%3A_URIs

阅读更多内容

另一种可能性是,由于 file:// URI 的敏感性,附加 SDK 有意禁用内容脚本。

无论哪种方式,请检查浏览器控制台,看看是否有任何相关的错误消息。

在您的 PageMod 构造函数中,您需要定义 file:// 架构以及 * 通配符。

var data = require('sdk/self').data;
var pageMod = require('sdk/page-mod');

function startListening(){
  // noop
}

pageMod.PageMod({
  include: ['*', 'file://*'],
  contentScriptFile: [
    data.url('content-scripts.js')
  ],
  onAttach: startListening
});

这允许 PageMod 模块在 file:// 模式的

上包含内容脚本