2

問題は、スクリプトがページ上にあり、通常はネットからフェッチされている場合に機能しますが、プラグインの一部としてコードがユーザースクリプトにある場合、Access-Control-Allow-Origin: *ヘッダーがあることを突然忘れて、クロスドメインリクエストへの応答を停止することです.

これを示すコードを次に示します。

// ==UserScript==
// @include     *nasa.gov*
// ==/UserScript==

var xhr = new window.XMLHttpRequest();
xhr.onreadystatechange = function () {
  alert('state changed: ' + this.readyState + "\nstatus: " + this.status);
};
xhr.onload = function(){
  alert('document loaded');
};
xhr.open('GET','http://apod.nasa.gov');
xhr.send(null);

最新の Web サイトの白黒がないため、apod サイトを選択したので、イベントをフィルター処理する必要はありません。

そして、この状態では機能しますが、このURLをすべてのサイトからの呼び出しを受け入れるサーバーに向けると、allow-originヘッダーが無視されます...

わかりました、それはバグですか、それともここで何か間違っていますか? そこに行っても大丈夫であることを「保証」するためのリクエストオブジェクトのオプションかもしれませんか?私は好きxhr.allowcrossdomainaccess = trueか何かを知りませんか?

4

1 に答える 1

1

(あなたはすでにこれを理解しています - しかし、この質問に適切な答えを与えるためだけに..)

挿入されたスクリプトは、ページ スクリプトと同じように (ほとんどの場合) 通常のセキュリティ権限でページ内で実行されます。したがって、通常、挿入されたスクリプトからクロスドメイン リクエストを実行することはできません。

Opera での CORS の実装状況については、 https: //stackoverflow.com/a/9614760/163549も参照してください。

于 2012-07-24T02:57:40.373 に答える