扩展内容脚本只打开:空白

时间:2013-11-30 05:35:25

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

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

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

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

当我在选项页面上运行相同的代码(通过开发人员工具控制台)时,它可以正常工作。如果我发布包含文字chrome.extension.getURL("options.html")的提醒,则会按预期运行。

This chrome documentation page表明我正在做的事情应该正常运作。那么,我该如何解决这个问题?

编辑:

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

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

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

1 个答案:

答案 0 :(得分:3)

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

扩展文件结构:

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