2012-04-07 13 views
0

Chrome拡張機能のOptional Permissions APIを使用しているときに問題が発生しました。以下の最小限の拡張の例では、スクリプトはまず権限が存在するかどうかをチェックし、そうでない場合は権限を要求し、トークンを変更して権限が存在すると言います。これを拡張機能のオプションページから実装し、成功は赤から青に変わる四角で示しています。失敗は赤色の四角で表示されます。Chrome拡張機能オプションの権限がコールバック機能を評価しない

これは面白いことですが、スクリプトはChromeのインスペクタでブレークポイントを設定し、ステップバイステップで進める場合にのみ機能します。拡張機能がブレークポイントなしで実行されているときは、動作しません(パーミッションのプロンプトも表示されません)。私はこれをbug for Chromeとして提出しましたが、私は何か間違っているのか本当に不思議です。

<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> 

options.html

manifest.jsonを

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

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

"version": "1.0.0" 
} 

私はインストールと試みるの容易さのためCRX hereとしてこれをアップロードしました。あるいは、上記の展開された拡張モジュールを単にロードすることもできます。

答えて

2

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

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

既に承諾されたアクセス許可のプロンプトに対して、警告メッセージは表示されません。

+0

許可リクエストが非同期的に処理されているという問題に基づいて、私はこの例を思いついた(許可のためのプロンプトが表示されている間、javascriptの行は実行を続ける)。同期スクリプトを強制することについてもっと賢明になる必要があるようですね。多分:while(perm == undefined)。 – MDMower

関連する問題