我的Chrome扩展程序未使用content_scripts
,因为我不想将代码注入每个页面。相反,当用户点击按钮时,会打开一个弹出窗口并将代码注入页面。
因此,在manifest.json
中有一个权限块:
"permissions": [
"activeTab"
]
在popup.js
中有以下代码:
chrome.windows.getCurrent( function(win) {
chrome.tabs.query({
'windowId': win.id,
'active': true
}, function(tabArray) {
// inject css & js only on initial click
chrome.tabs.executeScript( null, {
code : 'document.querySelector( "body" ).classList.contains( "_myExtension_code_injected" )'
}, function( result ) {
if ( result && !result[0] ) {
chrome.tabs.insertCSS( null, {
file: 'myExtension.css'
});
chrome.tabs.executeScript(null, {
file: 'myExtension.js'
}, function(){
chrome.tabs.executeScript(null, {
code: 'myExtension.init();'
});
});
}
});
});
});
问题是一些网站打开一个包含附加信息的弹出窗口。该弹出页面的URL为"about:blank"
。如果我尝试初始化扩展,我会在控制台中看到此消息:
运行tabs.executeScript时未经检查的runtime.lastError:无法访问url“about:blank”的内容。扩展清单必须请求访问此主机的权限。
我看不到将"about:blank"
页面添加到permissions
的方法。我真的不想开始使用content_scripts
,因此我可以设置match_about_blank
设置。
我尝试将"about:blank"
和"about:*
添加到permission
,我得到的只是一个安装错误。
尝试安装此扩展程序时出现警告: 权限'about:*'未知或URL模式格式错误。
有解决方案吗?
更新:Here is a gist with everything you'll need。包含jsbin演示的链接,但问题不在于该网站的具体问题。该扩展程序最初是在雅虎邮件弹出窗口中测试的,您可以选择打印电子邮件。
答案 0 :(得分:5)
尝试使用chrome.tabs.executeScript({ file: "script.js", matchAboutBlank: true })
"如果matchAboutBlank为true,那么如果您的扩展程序可以访问其父文档,则代码也会注入about:blank和about:srcdoc框架。代码无法插入顶层about:-frames。默认情况下,它是假的。"
https://developer.chrome.com/extensions/tabs#property-details-matchAboutBlank