我的 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/