2012-04-07 1 views
0

Chrome 확장 프로그램에 Optional Permissions API을 사용하는 중에 문제가 발생했습니다. 확장의 다음 예제에서는 스크립트가 먼저 사용 권한이 있는지 여부를 확인한 다음 사용 권한이 있는지 확인하고 사용 권한이 있다고 말할 수 있도록 토큰을 수정합니다. 확장을 위해 옵션 페이지를 통해이를 구현했으며 성공은 빨간색에서 파란색으로 바뀌는 사각형으로 표시됩니다. 실패는 빨간색으로 표시된 사각형으로 표시됩니다.크롬 확장 옵션 권한이 콜백 함수를 평가하지 않습니다.

재미있는 점은 Chrome의 검사기에서 중단 점을 설정하고 단계별로 진행하면 스크립트가 작동한다는 것입니다. 확장 기능이 중단 점없이 실행될 때 작동하지 않습니다 (심지어 사용 권한을 요구하지 않습니다). 나는 이것을 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> 

I 설치 및 시도의 용이성에 대한 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

권한 요청이 비동기 적으로 처리되는 문제를 기반으로 예제를 만들었습니다 (자바 스크립트 행은 권한 요청이 실행되는 동안 계속 실행됩니다). 동기 스크립팅을 강요하는 데 좀 더 영리해야 할 것 같습니다. 아마도 : while (perm == undefined). – MDMower

관련 문제