javascript - 扩展内容脚本仅打开约 :blank

标签 javascript google-chrome google-chrome-extension content-script

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

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

但是每当我尝试这个时,我只会得到一个带有 about:blank 的新标签,而不是带有我的选项页面的标签。

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

This chrome documentation page建议我正在做的事情应该正常工作。那么,我应该如何着手解决这个问题?

编辑:

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

  • 如果我插入一个指向该页面的链接并单击它,我会得到 about:blank
  • 如果我插入一个链接并右击,然后在新标签页/窗口中打开或复制 URL,它会正常工作。
  • 如果我注入(inject)重定向,我将被重定向到 about:blank
  • 如果我在任何地方插入 URL 的文本,它工作正常。
  • 如果我从任何非扩展页面注入(inject)准确的 URL(没有 chrome.extension.getURL 等),它就不起作用。

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

最佳答案

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

扩展文件结构:

          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);

list .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"]
}

关于javascript - 扩展内容脚本仅打开约 :blank,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20296961/

相关文章:

google-chrome - chrome 开发工具 "continuous page repainting"选项在哪里?

javascript - chrome 扩展 - 将消息从内容脚本发送到后台页面并返回到内容脚本?

javascript - 在 Flow 中,我可以声明一个函数签名,以便我可以在任何地方重用它吗?

javascript - 在第二页使用第一页的数据

javascript - 禁用表单元素

回调完成之前发生的 JavaScript 结果

internet-explorer - 如何通知用户他的浏览器不受支持

javascript - 获取 Chrome A 扩展中选定选项卡发出的所有 WebRequest

google-chrome-extension - 如何从弹出窗口与 background.js 交互?

javascript - javascript回调函数中的参数从哪里来?