2012-04-07 5 views
0

Ich habe ein Problem mit der Optional Permissions API für Chrome-Erweiterungen aufgetreten. Im folgenden minimalen Beispiel für eine Erweiterung erwarte ich, dass das Skript zunächst prüft, ob eine Berechtigung vorhanden ist, und wenn nicht, Berechtigungen anfordern und ein Token so ändern, dass die Berechtigung angegeben wird. Ich habe dies über die Optionsseite für eine Erweiterung implementiert, und der Erfolg wird durch ein Quadrat angezeigt, das von Rot zu Blau wechselt. Der Fehler wird angezeigt, indem das Quadrat rot bleibt.Chrome-Erweiterungen Optionale Berechtigungen werden die Callback-Funktion nicht auswerten

Hier ist die lustige Sache, das Skript funktioniert nur, wenn ich einen Haltepunkt in Chrome Inspector setzen und Schritt für Schritt durch es gehen. Es funktioniert nicht (wird nicht einmal nach Berechtigungen gefragt), wenn die Erweiterung ohne Haltepunkte ausgeführt wird. Ich habe dies als bug for Chrome eingereicht, aber ich frage mich wirklich, ob ich etwas falsch mache.

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> 

ich das als CRX hochgeladen here für eine einfache Installation und versuchen. Oder Sie laden einfach die entpackte Erweiterung oben.

Antwort

2

Leider können Sie chrome.permissions.request in der Callback-Funktion chrome.permissions.contains nicht aufrufen, da es nicht im richtigen Kontext ist. Außerdem müssen Sie auch nicht vorher nach der Erlaubnis suchen.

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

Für eine bereits akzeptierte Erlaubnis wird die Warnmeldung nicht angezeigt.

+0

Ich kam mit dem Beispiel basierend auf Schwierigkeiten, die ich mit Erlaubnis Anforderungen hatte, die asynchron behandelt werden (JavaScript-Linien weiterhin ausgeführt, während die Eingabeaufforderung für die Erlaubnis ist). Sieht so aus, als müsste ich das synchrone Scripting erzwingen ... vielleicht: while (perm == undefined). – MDMower

Verwandte Themen