2012-04-10 17 views
0

私はalert(txt);を使用した場合に正常に動作するクロスドメインAjaxコールを以下のAjaxスクリプトで使用していますが、結果をプリントするためにdocument.write(txt);に変更すると、 、それが機能しない理由を確認していないクロスドメインAjaxコールがdocument.writeと連携していません

それは愚かなものかもしれないが、私はちょうど

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"; 

答えて

1

私は文書がある後に一部のブラウザでは、あなたがdocument.writeを呼び出すことができないと信じて、それを把握することはできません読み込み完了...

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

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)); 
} 
+0

@Prestaul 'document.open()'はドキュメントをクリアします。以前のコードをすべて消去することなく、ページが解析された後に 'document.write()'を使用することはできません。 – Teemu

+0

@Teemu、それは私がjsfiddleで見ていたことを説明しています。フィードバックをお寄せいただきありがとうございます。 – Prestaul

関連する問題