Chrome扩展程序可选权限不会评估回调函数

时间:2012-04-07 17:57:31

标签: google-chrome-extension

我在使用Optional Permissions API Chrome扩展程序时遇到了问题。在以下扩展的最小示例中,我希望脚本首先检查权限是否存在,如果不存在,则请求权限并修改令牌以表示权限存在。我通过扩展的选项页面实现了这一点,并且成功由红色到蓝色的正方形表示。失败由正方形保持红色表示。

这是有趣的事情,只有在Chrome的Inspector中设置断点并逐步完成后,脚本才有效。在没有断点的情况下运行扩展时,它无法工作(甚至不会提示权限)。我以bug for Chrome提交了这个,但我真的很想知道我做错了什么。

的manifest.json

{
"description": "Permissions Tester",
"name": "Permissions Tester",
"options_page": "options.html",

"optional_permissions": [ "http://api.labs.crossref.org/" ],

"version": "1.0.0"
}

options.html

<script>
function setCrossrefPermission() {
    var perm;

    chrome.permissions.contains({
        origins: ['http://api.labs.crossref.org/']
    }, function(result) {
        if(!result) {
            chrome.permissions.request({
                origins: ['http://api.labs.crossref.org/']
            }, function(granted) {
                perm = granted;
            });
        } else {
            perm = true;
        }
    });

    return perm;
}

function hitIt() {
    if( setCrossrefPermission() ) document.getElementById("notify").style.backgroundColor = "blue";
}
</script>

<html>
<body>

<div style="width: 100px; height:100px; background-color:red;" id="notify"></div>
<input type="submit" id="button" onclick="hitIt(); return false;" value="Accept Permission" />

</body>
</html>

我将其作为CRX here上传,以便于安装和尝试。或者您只需加载上面的解压缩扩展程序。

1 个答案:

答案 0 :(得分:3)

很遗憾,您无法在chrome.permissions.request回调函数中调用chrome.permissions.contains,因为它不在正确的上下文中。此外,您实际上不需要事先检查权限。

function setCrossrefPermission() {
    chrome.permissions.request({
      origins: ['http://api.labs.crossref.org/']
    }, function(granted) {
      return granted;
    });
}

对于已经接受的权限提示,不会显示警告消息。