带src链接和执行文本的script

不知道怎么去命名这种用法,所以标题干脆就那样写了,不过这种方式也不是新鲜事了,只是想到了它的另外一些作用,所以YY一下。先看HTML和JS代码样式:

<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Untitled Document</title>
        <style type="text/css">
            #div {
                border: 1px solid #ccc;
            }
        </style>
    </head>
    <body>
        <div id="div">
            Test Test Test Test Test Test Test
        </div>
	    <!-- It is the point:既带src联入js文件,又带有执行代码  -->
        <script id="load" type="text/javascript" src="test.js">
        	alert(MYAPP.util.Dom.getHTMLText(document.getElementById("div")));
        </script>
    </body>
</html>
var MYAPP = {};
MYAPP.namespace = function(s){
    var names = s && typeof s.split === "function" ? s.split(".") : [];
    var current = MYAPP;
    for (var i = 0, l = names.length; i < l; i++) {
        if (!current[names[i]]) {
            current[names[i]] = {};
        }
        current = current[names[i]];
    }
};

MYAPP.namespace("util.Dom");
var D = MYAPP.util.Dom;
D.getHTMLText = function(el){
    return el.innerHTML;
}

//执行指定的script标签内的内容
eval(document.getElementById("load").innerHTML);

上面的这种eval代码的方式获取不是很且当,我也这么觉得。所以我就在test.js文件里加入了一个37K大小的javascript库来测试(测试页面,大家可以使用各自的浏览器测试一番,我是测试没问题的),这有一个非常好的用处是:减少了一个HTTP Request请求!!确实是这样的,如果按照常规的话,则需要两个script标签来写上面的结构了。

刚开始的时候,我也是按照下面比较符合常规的思路来编写test.js代码的:

var MYAPP = {};
MYAPP.namespace = function(s){
    var names = s && typeof s.split === "function" ? s.split(".") : [];
    var current = MYAPP;
    for (var i = 0, l = names.length; i < l; i++) {
        if (!current[names[i]]) {
            current[names[i]] = {};
        }
        current = current[names[i]];
    }
};

MYAPP.namespace("util.Dom");
var D = MYAPP.util.Dom;
D.getHTMLText = function(el){
    return el.innerHTML;
}

//常规方式:
var script=document.getElementById("load");
if(script.onreadystatechange){
	script.onreadystatechange=function(){
		if(script.readyState === "loaded" || script.readyState === "complete"){
			eval(script.innerHTML);
		}
	}
}else{
	script.onload=function(){
		eval(this.innerHTML);
	}
}

上面的代码在FF,GC,Safari没问题,可是在IE以及Opera(因为Opera对两种判断是否load的方式都支持)下就失效了,调试了一下午的代码也都没有检查出原因,如果有知道方法和原因的,还希望不吝赐教!!(常规方式测试页面)。

你的手印呢?