12

含まれている任意の Web サイトで動作する Javascript コードを提供したいのですが、Javascript がホストされているサーバーで常により多くのデータを取得する (またはデータを変更する) 必要があります。明らかな理由でセキュリティ上の制限が設けられていることは知っています。

以下を含む xyz.com でホストされている index.html を検討してください。

<script type="text/javascript" src="http://abc.com/some.js"></script>

some.js は XMLHttpRequest を使用してデータを abc.com に投稿できますか? つまり、abc.com から Javascript をロードしたので、abc.com は暗黙的に信頼されているのでしょうか?

4

3 に答える 3

18

some.js は XMLHttpRequest を使用してデータを abc.com に投稿できますか? つまり、abc.com から Javascript をロードしたので、abc.com は暗黙的に信頼されているのでしょうか?

いいえ、スクリプトは別のドメインに読み込まれるため、アクセスできません...

データ ソースが信頼できる場合は、おそらく JSONP の方が適切なオプションです。JSONP では、SRC を別のドメインに設定し、コールバックをクエリ文字列のパラメーターとして設定して、ページに新しい SCRIPT 要素を動的に追加します。例えば:

function getJSON(URL,success){
    var ud = 'json'+(Math.random()*100).toString().replace(/\./g,'');
    window[ud]= function(o){
        success&&success(o);
    };
    document.getElementsByTagName('body')[0].appendChild((function(){
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.src = URL.replace('callback=?','callback='+ud);
        return s;
    })());
}

getJSON('http://YOUR-DOMAIN.com/script.php?dataName=john&dataAge=99&callback=?',function(data){
    var success = data.flag === 'successful';
    if(success) {
        alert('The POST to abc.com WORKED SUCCESSFULLY');
    }
});

そのため、PHP/CURL を使用して abc.com ドメインに投稿し、JSONP 形式で応答を出力する独自のスクリプトをホストする必要があります。

私はPHPがあまり得意ではありませんが、次のようなものかもしれません:

<?php
    /* Grab the variables */
    $postURL = $_GET['posturl'];
    $postData['name'] = $_GET['dataName'];
    $postData['age'] = $_GET['dataAge'];

    /* Here, POST to abc.com */
    /* MORE INFO: http://uk3.php.net/curl & http://www.askapache.com/htaccess/sending-post-form-data-with-php-curl.html */

    /* Fake data (just for this example:) */
    $postResponse = 'blahblahblah';
    $postSuccess = TRUE;

    /* Once you've done that, you can output a JSONP response */
    /* Remember JSON format == 'JavaScript Object Notation' - e.g. {'foo':{'bar':'foo'}} */
    echo $_GET['callback'] . '({';
    echo "'flag':' . $postSuccess . ',";
    echo "'response':' . $postResponse . '})";

?>

したがって、制御できるサーバーは、クライアントと abc.com の間の媒体として機能し、応答を JSON 形式でクライアントに送り返し、JavaScript が理解して使用できるようにします...

于 2008-12-27T17:19:25.133 に答える
3

最も簡単なオプションは、javascript をロードするサーバーを介して呼び出しをプロキシすることです。そのため、some.js はホスティング サーバーを呼び出し、そのサーバーは要求を abc.com に転送します。

もちろん、ホスティング事業者を制御できないためにそれができない場合は、いくつかのオプションがありますが、クロス ブラウザーの問題に悩まされているようです: http://ajaxian.com/archives/how-to-make-xmlhttprequest-calls -ドメイン内の別のサーバーへ

于 2008-12-27T14:37:38.703 に答える
0

easyXSSを使用できます。ドメインの境界を越えてデータを渡し、メソッドを呼び出すことができるライブラリです。それは非常に簡単で、あなたはそれを使うことができるはずです. code.google.com サイトに多くの例があります

于 2009-07-05T21:53:01.443 に答える