1

Chrome拡張機能用のオプションのアクセス許可APIを使用して問題が発生しました。次の拡張機能の最小限の例では、スクリプトが最初にアクセス許可が存在するかどうかを確認し、存在しない場合はアクセス許可を要求し、トークンを変更してアクセス許可が存在することを示します。拡張機能のオプションページを介してこれを実装しました。成功は、赤から青に変わる正方形で示されます。失敗は、赤いままの四角で示されます。

これが面白いことです。スクリプトは、Chromeのインスペクターにブレークポイントを設定して段階的に進めた場合にのみ機能します。拡張機能がブレークポイントなしで実行されると、機能しません(アクセス許可のプロンプトも表示されません)。これをChromeのバグとして提出しましたが、何か間違ったことをしているのではないかと思います。

マニフェスト.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としてここにアップロードしました。または、上記の解凍された拡張機能をロードすることもできます。

4

1 に答える 1

4

残念ながらchrome.permissions.requestchrome.permissions.containsコールバック関数は正しいコンテキストにないため、呼び出すことはできません。また、実際に事前に許可を確認する必要もありません。

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

すでに受け入れられている許可プロンプトの場合、警告メッセージは表示されません。

于 2012-04-07T18:57:31.917 に答える