2010-02-06 118 views
2

我正在写一个小的JavaScript代码,它将在html页面加载时加载外部js文件。Safari和Chrome浏览器不会动态地添加<script>标签页面加载

我测试了2种方法。

案例1:使用document.write添加<脚本>标记。 它适用于所有浏览器(IE,FF,Safari,Chrome,Opera)。

案例2:用于DOMElement.appendChild到>标记添加<脚本到<haed>元素。

只适用于IE,FF和Opera。没有适用于Safari和Chrome。

在这两种情况下,我预计新的<脚本>标签正在插入<标头>标签结束。 因此,新的<脚本>标记在处理<主体>之前被评估,并且在window.onload被调用时,“success”变量应该为true。

但它不适用于Safari和Chrome。

任何人都可以告诉这是否应该或不应该工作?谢谢。

<html> 
    <head> 
    <title>JavaScript loading test</title> 
    <script type="text/javascript"> 
     var success = false; 

     window.onload = function() 
     { 
     document.getElementById("result").innerHTML = success? "OK": "ERROR!"; 
     } 

     // TEST CASE 1. 
     // Works for all browsers. 
     document.write('<script type="text/javascript" src="foo.js"></' + 'script>'); 

     // TEST CASE 2. 
     // Only works for Opera, FireFox, Opera. 
     // var scriptElem = document.createElement("script"); 
     // scriptElem.setAttribute("type", "text/javascript"); 
     // scriptElem.setAttribute("src", "foo.js"); 
     // var headElem = document.getElementsByTagName("head")[0]; 
     // headElem.appendChild(scriptElem); 
    </script> 
    <!-- expected new scrip tag being inserted here. --> 
    </head> 
    <body> 
    Testing...<br/> 
    <span id="result"></span> 
    </body> 
</html> 

“foo.js”只是一行代码。

success = true; 
+0

只是一个注释的开始 - 通过稍微修改你的榜样,我好不容易才得到一个不同的行为Opera,Firefox,Safari和Safari,同时逐步完成代码。 – 2010-02-06 09:34:38

+0

顺便说一句,''...'仍然无效。在脚本块中保护结束标记字符串文字的最简单有效方法是'<\/script'。 – bobince 2010-02-06 13:26:44

+0

你有没有找到解决这个问题的方法? – Fabii 2015-03-09 20:31:49

回答

1

当你的javascript评估时,DOM没有完全构建,head元素甚至没有完成。在HTML页面完全加载之前,您通常无法访问或操作DOM(getElementsByTagNameappendChild等)。

+0

您可以在加载页面之前访问DOM,但实际上无法访问当前脚本块下方的元素,并且执行操作(如插入尚未遇到close-tag的元素)的操作非常不可靠。 – bobince 2010-02-06 13:24:57

4

试试这个:

var s = document.createElement('SCRIPT'); 
s.charset = 'UTF-8'; 
s.src ='foo.js'; 
document.getElementsByTagName('HEAD')[0].appendChild(s); 

但是把这个脚本中的标签在BODY标签

+0

谢谢麦克风。 但Safari和Chrome仍然显示相同的错误... – 3rensho 2010-02-07 05:29:43

相关问题