6

xhrを介してhttp:// javascriptファイルを取得しようとしていますが、上記のエラーが発生しています。

これが私のコードです:

function getXHR() {
    var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;

    if (is_chrome) {
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "http://api.widgets.org/widget/1.1.2/widget_api.js?autoCreate=false&log=true", true);
    xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
        var s = document.createElement('script');
        s.textContent = xhr.responseText;
        (document.head||document.documentElement).appendChild(s);
        s.parentNode.removeChild(s);
        }
    }
    xhr.send();
    }
}

https://でスクリプトを使用したいのですが、Chromeはhttp://からすべてを自動的にブロックするため、これはChrome専用です。スクリプトを取得しているサーバーはhttps://を実行しておらず、スクリプトが必要です/複数のスクリプトがあります。すべてをデータファイルにコピーする必要はありません。

私が遭遇しているエラー:

XMLHttpRequest cannot load http://api.widgets.org/widget/1.1.2/widget_api.js?autoCreate=false&log=true. Origin https://mysite.com is not allowed by Access-Control-Allow-Origin.
4

3 に答える 3

4

<script>このXHRラッパーの代わりにタグを直接挿入してから、コンテンツをタグに挿入するだけ<script> です。

function getScript() {
    var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;

    if (is_chrome) {
        // generate script element and set its source
        var s = document.createElement('script');
        s.src = "http://api.widgets.org/widget/1.1.2/widget_api.js?autoCreate=false&log=true";
        // remove the script element after loading
        s.addEventListener( 'load', function(){ s.parentNode.removeChild(s); } );
        (document.head||document.documentElement).appendChild(s);
    }
}

その上、ロード後にスクリプト要素を削除しようとする理由がわかりません。これは、そのコード内で作成されたオブジェクト/メソッド/変数には影響しません。

于 2013-02-08T17:03:45.497 に答える
3

次のようにサーバーファイルのフルパスをショートパスに変更しました。

$.post('http://example.com/pages/loadRandomImages.php',{'type':'loadRandomImages','loadingReq':'True'},function(data){

------------
----------
});

に変更しました、

$.post('/pages/loadRandomImages.php',{'type':'loadRandomImages','loadingReq':'True'},function(data){

------------
----------
});

その後、クロムで正常に動作しました。

于 2013-05-06T18:59:27.400 に答える
1

クロスサイトスクリプティングに関連するセキュリティ目的で、リクエストを行っているページのサーバーとは異なるサーバーに対して行われたブラウザのブロックXHRリクエスト。

ロードしたいスクリプトだけの場合は、

<script src="..."></script>

一般的なXHRの場合、APIが提供する場合は、jsonpの回避策を使用するか、APIのオペレーターにCORS(クロスオリジンリソースシェアリング)を有効にするように依頼できます。

http://developer.chrome.com/extensions/xhr.html https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS http://www.w3.org/TR/cors/ http: //en.wikipedia.org/wiki/JSONP

于 2013-02-08T17:05:13.980 に答える