扩展内容脚本仅打开关于:空白

Extension content script only opening about:blank

本文关键字:开关 空白 脚本 扩展      更新时间:2024-01-16

我的chrome扩展内容脚本中有以下代码:

window.open(chrome.extension.getURL("options.html"),'_blank');

但每当我尝试这样做时,我都会得到一个新的选项卡,其中包含大约:空白,而不是我的选项页。

当我在选项页上运行相同的代码(通过开发人员工具控制台)时,它可以正常工作。如果我启动一个文本为chrome.extension.getURL("options.html")的警报,它将按预期工作。

这个chrome文档页面表明我所做的工作应该是正确的。那么,我该如何着手解决这个问题呢?

编辑:

我认为这与内容安全策略有关。

  • 如果我插入一个链接到页面,然后点击它,我会得到:空白
  • 如果我插入一个链接并右键单击,然后在新的选项卡/窗口中打开或复制URL,它就可以正常工作
  • 如果我注入重定向,我会被重定向到about:black
  • 如果我在任何地方插入URL的文本,它都可以正常工作
  • 如果我从ANY非扩展页面注入确切的URL(没有chrome.extension.getURL等),它就不起作用

所以我想我的新(更一般的)问题是,我如何从内容脚本启动我的选项页面

为了能够在扩展上下文之外(例如在网页中)使用HTML文件(或任何其他资源),您需要在清单的web_accessible_resources部分添加目标HTML文件。例如:

扩展文件结构:

          root-dir/
           |_____manifest.json
           |_____content.js
           |_____options.html

content.js:

/* Append a link to the web-page's body */
var a = document.createElement("a");
a.href = chrome.extension.getURL("options.html");
a.target = "_blank";
a.textContent = "My HTML file";
document.body.appendChild(a);

manifest.json:

{
    "manifest_version": 2,
    "name":    "Test Extension",
    "version": "0.0",
    "offline_enabled": true,
    "content_scripts": [{
        "matches":    ["*://*/*"],
        "js":         ["content.js"],
        "run_at":     "document_end",
        "all_frames": false
    }],
    "web_accessible_resources": ["options.html"]
}