国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

給js文件傳參數(shù)(詳解)

2019-11-20 14:21:32
字體:
供稿:網(wǎng)友

一、利用全局變量

這是最簡(jiǎn)單的一種方式,比如Google Adsense:

復(fù)制代碼 代碼如下:

<script type="text/javascript"> google_ad_client ='pub-3741595817388494'; </script> <script type="text/javascript" src="http://pagead2. googlesyndication.com/pagead/show_ads.js"></script>

缺點(diǎn)是引入了全局變量。其中引入文件的方式還有兩個(gè)變體:

// 變體1:用document.write輸出 <script type="text/javascript"> google_ga_id ='g6u7un8646xx'; document.write(unescape('%3Cscript type="text/javascript" src= "http://www.google-analytics.com/ga.js"%3E%3C/script%3E')); </script> // 變體2:用DOM操作append到head里 <script type="text/javascript"> G_BEACON_ATP ='category=&userid=&channel=112ad_id='; document.getElementsByTagName('head')[0].appendChild(document. createElement('script')).src='http://taobao.com/atp.js'; </script> // 注意:上面的代碼是根據(jù)實(shí)際應(yīng)用虛擬的示范代碼

注:變體1應(yīng)用很多,常見寫法如下:

<script type="text/javascript"> // 直接轉(zhuǎn)義即可: document.write('<script type="text/javascript" src="test.js"></script>'); // 或者像Yahoo!首頁一樣: document.write('<scr'+'ipt type="text/javascript" src="test.js"></scr'+'ipt>');</script>

二、獲取并解析script元素的src

和全部變量相比,我們更希望能像下面這樣傳入?yún)?shù):

<script type="text/javascript" src="test.js?a=b&c=d"></script>

核心問題是如何獲取到src屬性。

方法一是給script添加id屬性,通過id得到當(dāng)前script,再用正則從src中取出參數(shù)。缺點(diǎn)是HTML 4.01 Specification里,SCRIPT元素沒有id屬性。這個(gè)缺點(diǎn)也算不得是缺點(diǎn),畢竟盡信標(biāo)準(zhǔn)不如無標(biāo)準(zhǔn)。

方法二是用js的文件名當(dāng)作鉤子,js代碼里通過document.getElementsByTagName('script')后,正則匹配出當(dāng)前js文件。這個(gè)方法很正統(tǒng),但要求文件名唯一。缺點(diǎn)是代碼多,不精煉,對(duì)性能也稍有影響。

方法三是在方法一的基礎(chǔ)上,干脆再添加一個(gè)自定義屬性data:

<script id="testScript" type="text/javascript" src="test.js" data="a=b&c=d"></script>

test.js文件里,通過下面這行得到傳入的參數(shù):

var scriptArgs = document.getElementById('testScript').getAttribute('data');方法四是利用js的順序執(zhí)行機(jī)制(js文件的加載可以是同步或異步方式,但執(zhí)行時(shí),一定是按照在文檔流中的順序來執(zhí)行的)。當(dāng)某個(gè)js文件執(zhí)行時(shí),一定是“已加載”的js文件中的最后一個(gè):

var scripts = document.getElementsByTagName('script'); var currentScript = scripts[scripts.length - 1];方法四比方法二更靈巧天才。

從代碼的精簡(jiǎn)和性能上講,方法三 > 方法 一 > 方法四 > 方法二

小結(jié):如果你很在意標(biāo)準(zhǔn),推薦方法四;如果和我一樣覺得沒必要完全遵守標(biāo)準(zhǔn),推薦方法三。

寫了個(gè)測(cè)試程序

<!DOCTYPE html><html><script src="a2.js"></script><script src="a2.js"></script><script src="a2.js"></script></html>

a2.js

var scripts = document.getElementsByTagName('script'); var currentScript = scripts.length;alert(currentScript);

分別打印出 

1 2 3

三、靈感方案

如果你和我一樣是John Resig的忠實(shí)fans,或許還記得去年8月份討論得很火爆的《Degrading Script Tags》。John Resig給我們開啟了一扇想象的門,對(duì)于本文的問題來說,還可以用以下“邪門歪道”來實(shí)現(xiàn):

<script type="text/javascript" src="test.js"> TB.SomeApp.scriptArgs ='a=b&c=d'; </script>

在test.js文件里:

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

這樣就將參數(shù)存儲(chǔ)到了TB.SomeApp.scriptArgs變量里。

當(dāng)參數(shù)不多時(shí),甚至可以這樣:

<script type="text/javascript" src="test.js">a=b&c=d</script>

js文件里:

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

想象是無止境的,還可以利用onload:

<script type="text/javascript" src="test.js" onload="TB.SomeFun('a=b&c=d')"></script>

js文件里定義好函數(shù)即可:

TB = {}; TB.SomeFun = function(arg) { //code};

上面的代碼在非ie瀏覽器下,都能正確運(yùn)行。針對(duì)笨笨的ie,還得加幾行代碼:

if(window.ActiveXObject) { var scripts = document.getElementsByTagName('script'); eval(scripts[scripts.length - 1].getAttribute('onload'));}
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿鲁科尔沁旗| 偏关县| 商水县| 靖远县| 信阳市| 伊川县| 新泰市| 秦皇岛市| 松潘县| 出国| 柏乡县| 莎车县| 靖远县| 吉木萨尔县| 平顺县| 白银市| 郸城县| 山丹县| 通化县| 汝阳县| 田林县| 汉沽区| 临沂市| 分宜县| 乐平市| 文山县| 淳安县| 九江市| 壶关县| 廊坊市| 绍兴市| 淮滨县| 斗六市| 白玉县| 崇义县| 满洲里市| 惠东县| 和硕县| 庄浪县| 南丹县| 巴南区|