0

私は少し混乱しています:

私が作る場合:

$.get('http://externhost/somefile.js', callback, 'text');

私が得た:

XMLHttpRequest cannot load http://externhost/somefile.js. Origin http://www.myhost.at is not allowed by Access-Control-Allow-Origin.

しかし、次のリクエストを行うと、問題はなく、すべてが正しく行われます。

$.get('http://externhost/somefile.js', callback, 'script');

これがデータ型スクリプトで機能する理由はわかりませんが、text/html/json では機能しません。

4

1 に答える 1

1

外部リソースからスクリプトを読み込もうとしているようです。これは危険な可能性があるため、次のような理由で外部リソースをロードできませ

ebay アカウントで何かをチェックしていると想像してください。次に、別のタブで私のサイトを開くと、ebay に一連のリクエストを送信し (ログインしたまま)、気づかないうちに Audi A8 の入札を行うスクリプトが表示されます。迷惑です...それがあなたの銀行だったら、あなたから直接お金を盗むことができます.

JavaScript ファイルをプレーン テキストとして読み込もうとしているという明白な点に注意する以外は、スクリプトの読み込みに失敗する理由を説明するつもりはありません。jQuery は、指定された属性scriptを持つ要素をドキュメントに追加することで、おそらく暗黙のうちに制限を覆しています。src同じことを (Google コードからロードされたprototype.js を使用して) 行ったときのドキュメントを見ると、これが起こったことです。

ここでの結論は、何をしようとしているのかということです。JavaScript ドキュメントを読み込もうとしている場合は、.getScript()メソッドを使用します。これにより、基本的に、指定されたソースで新しいスクリプト要素が作成され、外部ドキュメントにロードされます。JSONを使用しようとしている場合は、代わりにメソッドを使用し.getJSON()ますが、ここでクロスサイト スクリプティングの障壁を回避する必要があることに注意してください。JSONP (getJSON()ドキュメントとこちらを参照) を使用するか、次のように、サーバーを所有している場合は、適切なHTTP アクセス制御 (CORS)を設定します。

Access-Control-Allow-Origin: http://yoursite.com
于 2013-07-22T10:18:39.800 に答える