2011-11-30 140 views
1

從第三方聊天網站嵌入代碼建議嵌入代碼如下:有沒有辦法處理緩慢加載document.write腳本?

document.write(unescape("%3Cscript src='https://site.com/script.js' type='text/javascript'%3E%3C/script%3E")); 

和外部JavaScript本身也包含document.write代碼。這意味着傳統的延遲加載策略會阻止腳本完全工作。沒有延遲加載是一個問題,因爲腳本有時可能需要長達90秒才能加載,這會阻止整個頁面的DOMReady事件。

有什麼我可以在我自己的網站上做(因爲我無法控制嵌入式腳本)來處理性能問題?不介意這些解決方案是否適用於所有瀏覽器。

回答

0

您可以做的最好的事情是將腳本標記儘可能靠近文檔末尾(在標記之前)。並且你可以通過這樣的功能添加腳本:

function loadScript(url, callback) { 
     var script = document.createElement("script"); 

     script.type = "text/javascript"; 

     //callback functionality 
     if (!!callback && Ext.isFunction(callback)) { 
      if (script.readyState) { //IE 
       script.onreadystatechange = function() { 
        if (script.readyState === "loaded" || script.readyState === "compleate") { 
         script.onreadystatechange = null; 
         callback(); 
        } 
       }; 
      } else { //other browsers 
       script.onload = function() { 
        callback(); 
       } 
      } 
     } 

     script.src = url; 
     document.getElementsByTagName('head')[0].appendChild(script); 
    } 

而是採用

document.write('...') 
+0

我已經說過,由於腳本本身使用document.write而不起作用。 –

1

你可以把它放在一個iframe - 即使它阻止,阻止了一個不同的文檔。你也可以把它放在頁面的底部(這樣它不會延遲頁面),然後將DOM中產生的HTML移到你想要的地方 - 這是一個更危險的策略,因爲它可能會導致聊天碼。

+0

它已經在頁面的底部 - 因爲腳本立即在document.write中執行,DOMReady事件被阻止。所以這不會有幫助。 –

+0

iFrame雖然是一個有趣的想法,但會看看我是否可以做點什麼。 –

+0

ahhh ...對,將腳本移動到底部*將*有助於不延遲頁面內容,但它無法幫助DOMLoad – Madd0g

相關問題