0

サーバーから XML コンテンツを要求し、ポップアップ/ダイアログ ウィンドウにデータを表示する拡張機能を作成しています。次のように、Web サイトを manifest.json 権限に追加しました。

"permissions": [
    "http://*/*"
],

後で、バックグラウンド ページに次のコードを追加しました。

function loadData() {
var url = "http://www.foo.com/api/data.xml";
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
...
xhr.send();

問題は、「Origin chrome-extension://kafkefhcbdbpdlajophblggbkjloppll is not allowed by Access-Control-Allow-Origin.」というクロスサイト セキュリティ エラーが発生することです。

問題は、パーミッションに「http:// / 」を指定すると、「 http://www.foo.com/api 」をリクエストできますが、「http://www.foo」を許可する方法が見つかりません。 .com/api/data.xml ". 「アクセス許可」で「http:// / /*」と「http://www.foo.com/api/data.xml 」の両方を試しました。他に何をすればよいですか?

4

1 に答える 1

0

これは機能するはずです (SOP は chrome 拡張機能には適用されません)。3 つの可能性があります。

どこか間違っているところがあります

add<all urls>パーミッションを使用して、拡張機能が実際にこのパーミッションを持っていることを確認してください。(例:chrome.runtime.getManifest()バックグラウンドページを検査するときにコンソールで実行)

サーバー自体がOriginヘッダーをチェックしており、元の値が予期しない場合はリクエストを拒否しています

httpテスターを使用してリクエストを手動で送信することで、これをすばやく確認できます(たとえば、私は開発者の1人なので、クロムのDev Http Clientなど)。同じエラーが表示される場合は、サーバーが実際にオリジン ヘッダーをチェックしていることを意味します。

これを修正するには、何らかの方法でサーバーに origin を受け入れさせる必要があります。または、chrome.webRequestを使用して、ターゲット サーバーに送信されるすべてのリクエストに有効な origin ヘッダーを設定することもできます (標準の XHR API では、Origin ヘッダーの変更が許可されていません)。

Chrome のバグ

この場合、このエラーを報告するだけで、最善の結果が得られるまで待つことができます

于 2013-10-05T17:41:57.443 に答える