2011-11-30 142 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

相关问题