【问题标题】:Chrome extension permission for "about:blank" page“关于:空白”页面的 Chrome 扩展权限
【发布时间】: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


【解决方案1】:

尝试使用chrome.tabs.executeScript({ file: "script.js", matchAboutBlank: true })

"如果 matchAboutBlank 为真,那么如果您的扩展程序可以访问其父文档,那么代码也会被注入 about:blank 和 about:srcdoc 框架中。代码不能插入到顶层 about:-frames 中。默认情况下它是假的。”

https://developer.chrome.com/extensions/tabs#property-details-matchAboutBlank

【讨论】:

  • 谢谢!我在文档中完全错过了这一点。可悲的是,即使添加了该参数,我仍然看到相同的错误消息。
  • 也许问题是“about:blank”弹出页面没有显示为选项卡,所以我必须右键单击标题并选择“显示为选项卡”以获取扩展名按钮出现。
  • 也许问题是访问父文档部分。
  • 我创建了这个要点,并附有说明,以显示问题:gist.github.com/Mottie/91968692d074f93eb9a7
  • 我仍然收到此错误:Unchecked runtime.lastError: Cannot access "about:blank" at origin "null". Extension must have permission to access the frame's origin, and matchAboutBlank must be true.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 2021-01-14
  • 1970-01-01
相关资源
最近更新 更多