下面是几个使用JavaScript给JavaScript文件传递参数的例子。

一、使用全局变量进行船体参数
这是最简略的一种办法,比方Google Adsense:

JavaScript怎么给JavaScript文件传递参数(js如何传递参数)  传递参数 JavaScript 第1张


程序代码


缺陷是引进了全局变量。其间引进文件的办法还有两个变体:


程序代码
// 变体1:用document.write输出

程序代码
// 变体2:用DOM操作append到head里


留意:上面的代码是依据实践使用虚拟的演示代码

注:变体1使用许多,常见写法如下:


程序代码


二、获取并解析script元素的src进行传递参数

和悉数变量比较,咱们更希望能像下面这样传入参数:


程序代码


中心问题是怎么获取到src特点。

办法一是给script增加id特点,经过id得到当时script,再用正则从src中取出参数。缺陷是HTML 4.01 Specification里,SCRIPT元素没有id特点。这个缺陷也算不得是缺陷,终究尽信规范不如无规范。

办法二是用js的文件名当作钩子,js代码里经过document.getElementsByTagName('script')后,正则匹配出当时js文件。这个办法很正统,但要求文件名仅有。缺陷是代码多,不精粹,对功能也稍有影响。

办法三是在办法一的基础上,爽性再增加一个自界说特点data:


程序代码


test.js文件里,经过下面这行得到传入的参数:


程序代码
var scriptArgs = document.getElementById('testScript').getAttribute('data');


办法四是使用js的次序履行机制(js文件的加载可所以同步或异步办法,但履行时,一定是按照在文档流中的次序来履行的)。当某个js文件履行时,一定是“已加载”的js文件中的***一个:


程序代码
var scripts = document.getElementsByTagName('script');
var currentScript = scripts[scripts.length - 1];


办法四比办法二更灵活天才。

从代码的精简和功能上讲,办法三 > 办法 一 > 办法四 > 办法二

小结:假如你很介意规范,引荐办法四;假如和我相同觉得没必要彻底恪守规范,引荐办法三。

三、创意计划
假如你和我相同是John Resig的忠诚fans,或许还记得上一年8月份评论得很火爆的《Degrading Script Tags》。John Resig给咱们敞开了一扇幻想的门,关于本文的问题来说,还能够用以下“邪门歪道”来完成:


程序代码


在test.js文件里:


程序代码
TB = {}; TB.SomeApp = {};
var scripts = document.getElementsByTagName("script");
eval(scripts[ scripts.length - 1 ].innerHTML);


这样就将参数存储到了TB.SomeApp.scriptArgs变量里。

当参数不多时,乃至能够这样:


程序代码


js文件里:


程序代码
var scripts = document.getElementsByTagName("script");
var scriptArgs = scripts[ scripts.length - 1 ].innerHTML.replace(/[\s]/g, '');


幻想是无止境的,还能够使用onload:


程序代码


js文件里界说好函数即可:


程序代码
TB = {};
TB.SomeFun = function(arg) { //code };


上面的代码在非ie浏览器下,都能正确运转。针对笨笨的ie,还得加几行代码:


程序代码
if(window.ActiveXObject) {
var scripts = document.getElementsByTagName('script');
eval(scripts[scripts.length - 1].getAttribute('onload'));
}


只需继续发扬发掘精力,我信任还有更多创意计划-.-

总结
看了上面这么多解决计划,终究哪个计划***呢?我的答案是:没有***,只要最合适!由于关于不同的使用,以及不同的理念来说,对“好”的界说是各异的。

比方我当时的理念,觉得没必要彻底恪守规范,而全局变量,要防止的是乱用,不是不必。因而我会挑选全局变量计划,最简略,功能也***。

【修改引荐】

  1. JavaOne 2009第三天:微软与Sun/Oracle携手并进
  2. 开发高可移植性J2ME的软件
  3. Java虚拟机(JVM)中的内存设置详解
转载请说明出处
知优网 » JavaScript怎么给JavaScript文件传递参数(js如何传递参数)

发表评论

您需要后才能发表评论