0

현재 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을 제기했습니다. 그러나이 문제가 해결되지 않는 경우이 작업을 수행 할 수있는 해결 방법이 있으면 감사하겠습니다.

+0

XHR이 백그라운드 페이지 또는 콘텐츠 스크립트에서 수행되고 있습니까? 가능하다면,이 문제를 보여주는 최소한의 예제를 업로드 할 수 있습니까? –

+0

이것은 배경 스크립트 페이지가 아닌 배경 페이지입니다. 링크에서 전체 소스 코드를 볼 수 있습니다. –

+0

Fiddler 또는 WireShark를 사용하여 실제 http 요청/응답이 어떻게 표시되는지 알고 있습니까? 내 생각 엔 Chrome이 http 요청과 함께 Origin 헤더를 포함하고 있기 때문에 Cross-Domain Request (http://www.w3.org/TR/cors/)가되어 결국 실패하게됩니다.Chrome 확장 프로그램이 같은 출처 정책을 준수하기 시작할 것입니까? – monsur

답변

0

URL 끝에 *를 추가하면 와일드 카드를 사용합니다.

{ 
    "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" 
} 

http://code.google.com/chrome/extensions/match_patterns.html보기 - 우리의 문서의 일부가 *없이 작동 것을 암시하는 것 같다,하지만 ("나쁜 예"참조) 안된다.

+0

감사하지만 작동하지 않습니다. –

+0

... 또한 작업에 사용 된 별표를 생략했습니다. (필자는 Chrome의 이전 버전에서 테스트했을 때 잘 작동하고 별표를 포함하지 않는 몇 가지 확장 프로그램을 보유하고 있습니다.) –

관련 문제