私は現在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/"が含まれているので、なぜこれが失敗するのか分かりません。私は、クロス・オリジンXHRがコンテンツ・スクリプトでは許可されていないことについていくつか言及しましたが、これはコンテンツ・スクリプトではなくバックグラウンド・ページに含まれているスクリプトなので、なぜこれが失敗するのか混乱します。
注:私はChrome 14(devチャネル)を使用しています。 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
関数が定義された
xhr("http://www.mathworks.com/help/techdoc/ref/funcalpha.html",
function(url, req) {
// ...
},
function(url, req) {
// ...
}).send(null);
:
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;
}
NOTE
私も試してみました次の権限:
http://www.mathworks.com/*
http://*.mathworks.com/*
*://www.mathworks.com/*
*://*.mathworks.com/*
*://*
http://*/*
(私はとにかく、「すべてのWebサイト上のすべてのデータを」使用したいとは思わないでしょうが、これは、それは私が私の許可を宣言した方法に問題がないことを暗示しているようです、それが私が信じられないほど混乱している理由です)。
バージョン
14.0.803.0(公式ビルド90483)DEV私は、これは実際にはChromeのバグだと思うので、
更新
私は、このChrome bugを提出しました。ただし、これが修正されない場合は、この作業を行うことができる回避策があれば本当に感謝しています。
XHRはバックグラウンドページまたはコンテンツスクリプトから実行されていますか?可能であれば、この問題を示す最小限の例(できればアンパック拡張として)をアップロードできますか? –
これはバックグラウンドページであり、コンテンツスクリプトではありません。このリンクで完全なソースコードを見ることができます。 –
FiddlerやWireSharkを使って実際のHTTPリクエスト/レスポンスがどのようなものか分かりますか?私の推測では、クロムにはHTTP要求を伴うOriginヘッダーが含まれているため、Cross-Domain Request(http://www.w3.org/TR/cors/)が失敗します。クロムエクステンションが同じ起源のポリシーを遵守し始めるだろうか? – monsur