0

以下のこの Ajax スクリプトを使用して、クロスドメイン Ajax 呼び出しを作成してalert(txt);document.write(txt);ます。

それはばかげたことかもしれませんが、私はそれを理解することはできません

    function xss_ajax(url) {
        var script_id = null;
        var script = document.createElement('script');
        script.setAttribute('type', 'text/javascript');
        script.setAttribute('src', url);
        script.setAttribute('id', 'script_id');

        script_id = document.getElementById('script_id');
        if(script_id){
            document.getElementsByTagName('head')[0].removeChild(script_id);
        }

        // Insert <script> into DOM
        document.getElementsByTagName('head')[0].appendChild(script);
    }

    function callback(data) {
        var txt = '';
        for(var key in data) {
           txt += key + "  " + data[key];

        }
      //alert(txt);
      document.write(txt);
   }

    var url = "http://myserver.com";
4

1 に答える 1

1

一部のブラウザーでは、ドキュメントの読み込みが完了した後に document.write を呼び出すことができないと思います...

編集:私が打っているこのことは確かに機能しません。Teemu が指摘しているように、「open」を呼び出すとドキュメントがクリアされます。また、MDN は、自分で呼び出していない場合、.write を呼び出すと暗黙的に .open が呼び出されると述べています。 もう 1 つの可能性は、書き込みを開始するときにストリームを閉じる必要があるため、ドキュメントがレンダリングされていないことです。試すことができます(これが機能するかどうかはよくわかりません):

document.open();
document.write('stuff');
document.close();

ただし、appendChild などのドキュメントへの書き込みには、より標準的な方法を使用するか、フレームワーク (jQuery など) を使用することを強くお勧めします。

function callback(data) {
    var txt = '';
    for(var key in data) {
       txt += key + "  " + data[key];

    }
    //alert(txt);
    //document.write(txt);
    document.body.appendChild(document.createTextNode(txt));
}
于 2012-04-10T20:26:04.590 に答える