2010-09-14 57 views
0

我用成功下面的代碼以異步方式的一些內容加載到一個網頁:處理iframe時出現Jquery .load問題?

jQuery.noConflict(); 
     jQuery("#boxasync").load("box.php", "", 
      function(responseText, textStatus, XMLHttpRequest) { 
       if(textStatus == 'error') { 
        jQuery('#boxasync').html('There was an error making the AJAX request'); 
       }}); 

現在試圖使用相同的代碼加載共同sharebuttons(tweetme,Facebook和Digg的)的網頁內容被消滅時,並且瀏覽器被設置爲一種等待狀態。

我發現那些共享按鈕體現了一些嵌入iframe的代碼(並且JavaScript也是如此,恐怕)。

難道這就是jQuery .load失敗的原因嗎?

+1

.load()使用XMLHttpRequest,所以如果你正在做一個跨域請求(看起來像是這種情況),你的迴應將是空白的。有關堆棧溢出的信息很多,所以在這裏不再重複。 – BGerrissen 2010-09-14 15:49:55

+0

感謝您的幫助。在你看來,有沒有一種方法可以實現這些共享按鈕的異步加載? – Riccardo 2010-09-14 15:54:42

+0

我會四處搜尋。感謝您的幫助 – Riccardo 2010-09-14 16:04:20

回答

0

爲第三方調用設計的腳本通常使用document.write()來輸出其內容。

在主頁面源代碼中加載直接<script>元素時,這很好,因爲此時document.write僅將輸出添加到導致它的<script>位置的頁面。但是在頁面加載後沒有任何好處:內容沒有「寫入位置」,所以JS所做的就是在調用write之前推斷您打算撥打document.open()來寫一個全新的文檔。這破壞了當前頁面內容。

您可以通過自己的函數,它覆蓋document.write,重定向傳遞給它的變量則可以輸出到使用innerHTML/html()頁面中的字符串嘗試「騙」第三方腳本。但是,你可能會更好地提取腳本的內容並自己做。減少對第三方腳本的依賴是一件好事,因爲每次使用第三方腳本時,都會讓該方完全跨站點腳本訪問您的安全上下文。

在任何情況下,您都不應使用​​或.html()加載包含<script>的內容,因爲結果非常不可靠。

+0

應該使用什麼來加載可能包含