현재 developer omnibox extensions에 추가 된 Matlab API Search에 대해 작업 중이며 기묘한 XHR 문제 (Chrome에서 최근 변경된 것이 있는지 궁금 함)에 맞서고 있습니다.올바른 권한을 추가 했음에도 불구하고 Chrome 확장 프로그램에서 XHR을 금지하셨습니까?
http://www.mathworks.com/help/techdoc/ref/funcalpha.html에서 API 함수 목록을 가져 오려고하면 XHR이 "Access-Control-Allow-Origin"으로 실패합니다. 과거에 다른 확장 기능을 사용하여이 실패를 보았지만 일반적으로 매니페스트에서 적절한 사용 권한을 선언하는 것을 잊어 버린 결과였습니다. 그러나 내 매니페스트는 사용 권한 목록에 "http://www.mathworks.com/"을 포함하고 있으므로 이것이 왜 실패하는지 이해하지 못합니다. 콘텐츠 원본에서 Cross-Origin XHR이 허용되지 않는다는 언급을 보았습니다. 그러나이 스크립트는 콘텐츠 스크립트가 아닌 배경 페이지에 포함되어 있으므로 실패한 이유에 대해 혼란 스럽습니다.
참고 : Chrome 14 (개발 채널)를 사용하고 있습니다. Chrome의 이전 버전에서 정상적으로 작동하는 Chrome 14가 최근에 파손되었거나 내 코드에서 무언가 어리석은 짓을하는 경우인지 궁금합니다. Chrome 14에서 문제가 발생하는 경우 해결 방법에 대한 제안 사항에 큰 도움이됩니다.
매니페스트 :
{
"name":"Matlab API Search",
"description":"Adds support to the omnibox to search the Matlab API.",
"background_page":"background.html",
"icons":{"128":"icon128.png", "32":"icon32.png", "16":"icon16.png"},
"omnibox":{"keyword":"matlab"},
"permissions":[
"tabs",
"http://www.mathworks.com/"
],
"version":"1.0"
}
XHR 호출 :
xhr("http://www.mathworks.com/help/techdoc/ref/funcalpha.html",
function(url, req) {
// ...
},
function(url, req) {
// ...
}).send(null);
xhr
기능으로 정의 다음과
function xhr(url, ifexists, ifnotexists, retry_interval) {
var retry_time = retry_interval || 5;
var req = new XMLHttpRequest();
console.log("Fetching: " + url);
req.open("GET", url);
req.onreadystatechange=function(){
if (req.readyState == 4){
var status=req.status;
if ((status == 200) || (status == 301) || (status == 302)) {
ifexists(url, req);
} else {
ifnotexists(url, req);
setTimeout(function() { xhr(url, ifexists, ifnotexists, retry_time + 5).send(null); }, retry_time);
}
}
};
return req;
}
참고 나는 또한 시도
다음과 같은 권한이 :
http://www.mathworks.com/*
http://*.mathworks.com/*
*://www.mathworks.com/*
*://*.mathworks.com/*
*://*
http://*/*
(I는 "모든 데이터를 모든 웹 사이트의"사용하지 것이다, 어쨌든,하지만 그것은 내 권한을 선언하는 방식에 문제가 아님을 암시하는 것 같다, 그래서 나는 믿을 수 없을만큼 혼란 스럽다).
버전
14.0.803.0 (공식 빌드 90483) dev에 나는이 실제로 크롬의 버그라고 생각하기 때문에
업데이트
나는이 Chrome bug을 제기했습니다. 그러나이 문제가 해결되지 않는 경우이 작업을 수행 할 수있는 해결 방법이 있으면 감사하겠습니다.
XHR이 백그라운드 페이지 또는 콘텐츠 스크립트에서 수행되고 있습니까? 가능하다면,이 문제를 보여주는 최소한의 예제를 업로드 할 수 있습니까? –
이것은 배경 스크립트 페이지가 아닌 배경 페이지입니다. 링크에서 전체 소스 코드를 볼 수 있습니다. –
Fiddler 또는 WireShark를 사용하여 실제 http 요청/응답이 어떻게 표시되는지 알고 있습니까? 내 생각 엔 Chrome이 http 요청과 함께 Origin 헤더를 포함하고 있기 때문에 Cross-Domain Request (http://www.w3.org/TR/cors/)가되어 결국 실패하게됩니다.Chrome 확장 프로그램이 같은 출처 정책을 준수하기 시작할 것입니까? – monsur