当前位置: 代码迷 >> JavaScript >> 选项卡URL属于文件系统时,访问contentScript文件时出现问题
  详细解决方案

选项卡URL属于文件系统时,访问contentScript文件时出现问题

热度:90   发布时间:2023-06-05 11:40:02.0

以下是"main.js"代码的一部分。

我的问题是,当我使用"option 1" url ,代码可以正常工作,但是当我使用"option 2" url ,则标记为要在"content-script.js"上导出的函数(在"page.html"可以看到) "page.html" )在"page.html"上无法正确显示。

我拥有所有必要的代码来导出和交流内容。 关键点只是在pageUrl格式上。 使用以下形式的文件系统url时似乎存在一些问题:

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

在上述情况下( file:// ),出于某种原因未包含"contentScriptFile"

我是否需要对Firefox的安全性配置进行一些修改,例如在"about:config"区域中?

任何想法?

// [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
});

我知道内容的脚本不具有相同的原产地政策,由原始文档本身包含的脚本,但它可能是同源策略应用,由于文件的敏感性质://的URI。

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

您可以在阅读更多内容。

另一个可能性是,由于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://模式的file://包含内容脚本。