有没有办法处理缓慢加载的document.write脚本?

时间:2011-11-30 10:22:45

标签: javascript html

第三方聊天网站的嵌入代码推荐嵌入代码如下:

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

并且外部Javascript本身也包含document.write代码。这意味着传统的延迟加载策略会阻止脚本完全运行。没有延迟加载是一个问题,因为脚本有时可能需要90秒才能加载,这会阻止整个页面的DOMReady事件。

我可以在自己的网站上做些什么(鉴于我无法控制嵌入式脚本)来处理性能问题?不要介意解决方案是否无法在所有浏览器中使用。

2 个答案:

答案 0 :(得分:1)

您可以将其放在iframe中 - 即使它阻止,它也会阻止不同的文档。你也可以将它放在页面的底部(这样不会延迟页面),然后将生成的HTML在DOM中移动到你想要的位置 - 这是一个更危险的策略,因为它可能搞砸了聊天代码。

答案 1 :(得分: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('...')