2009年11月9日星期一

[note]克服Script标签的缺点

看了国外一个JS相关Blog的一篇文章,给我了很大启发。原文地址:http://ejohn.org/blog/degrading-script-tags/

文章大概讲的是:
HTML中<script>标签有src属性之后就无法执行它本身所包含的代码。例如:
<script src="some-lib.js"></script>
<script>
  var foo = use_some_lib();
  foo.do.stuff();
</script>

浏览器只会执行some-lib.js而不会去执行

  var foo = use_some_lib();
  foo.do.stuff();

但是很显然的是如下的代码更加简洁:
<script src="some-lib.js">
  var foo = use_some_lib();
  foo.do.stuff();
</script>

如何能克服这个问题呢?只需要在some-lib.js中添加如下代码即可:
var scripts = document.getElementsByTagName("script");
eval( scripts[ scripts.length - 1 ].innerHTML );

用eval函数来执行即可。(MS更复杂了?)有什么用呢?
原文举得一个例子:
var scripts = document.getElementsByTagName("script");
var script = scripts[ scripts.length - 1 ].innerHTML;
if ( script ) {
  jQuery(document).ready(function(){
    jQuery.globalEval( script );
  });
}

有人还借用这种方法实现对js文件传参数:http://lifesinger.org/blog/2009/03/how-to-pass-params-to-javascript-file/


没有评论: