【发布时间】:2015-08-29 17:41:33
【问题描述】:
我的 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 演示的链接,但问题不在于该站点。该扩展程序最初是在一个雅虎邮件弹出窗口中测试的,您可以通过选择打印电子邮件来获得该窗口。
【问题讨论】:
-
你不能在执行任何代码之前检查
windows.location.href的值和about:blank吗? -
Chrome 正在阻止代码注入,因为它需要权限。我包括上面显示的错误。
-
我理解那部分。但我的意思是如果可能的话,在注射部分周围进行检查。 (如果可能的话,我对此了解的不够多)
-
那不行,错误来自执行
chrome.tabs.executeScript,它与注入javascript的函数相同。 -
您能否举一个显示问题的页面(或视频)示例?当框架的来源可以确定时,Chrome 扩展程序只能在
about:blank上执行脚本,并且扩展程序有权在该来源上运行脚本。因此,如果它是一个about:blank页面,没有您的扩展程序可以访问的打开窗口或父框架,那么该扩展程序将被拒绝访问。
标签: javascript google-chrome google-chrome-extension