Google chrome extension Chrome扩展可选权限不会计算回调函数

Google chrome extension Chrome扩展可选权限不会计算回调函数,google-chrome-extension,Google Chrome Extension,我在使用Chrome扩展时遇到了一个问题。在下面的扩展的最小示例中,我希望脚本首先检查权限是否存在,如果不存在,则请求权限并修改令牌以表示权限存在。我通过扩展的选项页面实现了这一点,成功的标志是一个从红色变为蓝色的正方形。故障由剩余的红色方框指示 有趣的是,只有当我在Chrome的Inspector中设置了一个断点并一步一步地执行它时,脚本才会工作。在没有断点的情况下运行扩展时,它无法工作(甚至不会提示输入权限)。我提交这篇文章是作为一篇文章,但我真的怀疑我是否做错了什么 manifest.js

我在使用Chrome扩展时遇到了一个问题。在下面的扩展的最小示例中,我希望脚本首先检查权限是否存在,如果不存在,则请求权限并修改令牌以表示权限存在。我通过扩展的选项页面实现了这一点,成功的标志是一个从红色变为蓝色的正方形。故障由剩余的红色方框指示

有趣的是,只有当我在Chrome的Inspector中设置了一个断点并一步一步地执行它时,脚本才会工作。在没有断点的情况下运行扩展时,它无法工作(甚至不会提示输入权限)。我提交这篇文章是作为一篇文章,但我真的怀疑我是否做错了什么

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>

函数setCrossrefPermission(){
var-perm;
chrome.permissions.contains({
来源:['http://api.labs.crossref.org/']
},函数(结果){
如果(!结果){
chrome.permissions.request({
来源:['http://api.labs.crossref.org/']
},功能(已授予){
perm=已批准;
});
}否则{
perm=true;
}
});
回烫;
}
函数hitIt(){
if(setCrossrefPermission())document.getElementById(“通知”).style.backgroundColor=“蓝色”;
}

为了便于安装和尝试,我将其作为CRX上传。或者您可以简单地加载上面的解包扩展。

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

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

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

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

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

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

我根据异步处理权限请求时遇到的问题提出了该示例(当权限提示启动时,javascript行将继续执行)。看来我需要更聪明地强制同步脚本。。。可能:while(perm==undefined)。我根据异步处理权限请求时遇到的问题提出了这个示例(当提示权限时,javascript行继续执行)。看来我需要更聪明地强制同步脚本。。。可能:while(perm==未定义)。