亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

給js文件傳參數(詳解)

2019-11-20 14:21:32
字體:
來源:轉載
供稿:網友

一、利用全局變量

這是最簡單的一種方式,比如Google Adsense:

復制代碼 代碼如下:

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

缺點是引入了全局變量。其中引入文件的方式還有兩個變體:

// 變體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> // 注意:上面的代碼是根據實際應用虛擬的示范代碼

注:變體1應用很多,常見寫法如下:

<script type="text/javascript"> // 直接轉義即可: 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

和全部變量相比,我們更希望能像下面這樣傳入參數:

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

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

方法一是給script添加id屬性,通過id得到當前script,再用正則從src中取出參數。缺點是HTML 4.01 Specification里,SCRIPT元素沒有id屬性。這個缺點也算不得是缺點,畢竟盡信標準不如無標準。

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

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

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

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

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

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

從代碼的精簡和性能上講,方法三 > 方法 一 > 方法四 > 方法二

小結:如果你很在意標準,推薦方法四;如果和我一樣覺得沒必要完全遵守標準,推薦方法三。

寫了個測試程序

<!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的忠實fans,或許還記得去年8月份討論得很火爆的《Degrading Script Tags》。John Resig給我們開啟了一扇想象的門,對于本文的問題來說,還可以用以下“邪門歪道”來實現:

<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);

這樣就將參數存儲到了TB.SomeApp.scriptArgs變量里。

當參數不多時,甚至可以這樣:

<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文件里定義好函數即可:

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

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

if(window.ActiveXObject) { var scripts = document.getElementsByTagName('script'); eval(scripts[scripts.length - 1].getAttribute('onload'));}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
人妖精品videosex性欧美| 九九热精品在线| 国产欧美日韩精品在线观看| 国产97色在线|日韩| 精品中文字幕在线2019| 日本精品久久久久影院| 久久久久久97| 午夜精品一区二区三区在线播放| 久久久久久97| 亚洲欧美国产高清va在线播| 深夜精品寂寞黄网站在线观看| 日韩专区在线播放| 中文字幕精品一区久久久久| 中文字幕精品久久| 亚洲а∨天堂久久精品9966| 色噜噜狠狠色综合网图区| 欧美伊久线香蕉线新在线| 萌白酱国产一区二区| 欧美另类极品videosbest最新版本| 国产精品av在线播放| 久久av.com| 亚洲欧美一区二区三区在线| 亚洲成**性毛茸茸| 91最新在线免费观看| 国产精品黄色影片导航在线观看| 欧美日韩一区二区在线| 中文字幕亚洲综合| 国产精品女人网站| 亚洲最新av网址| 国产精品中文久久久久久久| 亚洲精品自在久久| 欧美日韩国产专区| 欧美一区二区色| 91在线免费看网站| 2018国产精品视频| 日韩在线视频网站| 91沈先生在线观看| 91免费在线视频| 久久久精品亚洲| xxav国产精品美女主播| 国产精品永久在线| 久久久亚洲福利精品午夜| 国产视频福利一区| 国产精品白丝av嫩草影院| 777午夜精品福利在线观看| 国产精品美腿一区在线看| 国产99视频精品免视看7| 亚洲国产精品悠悠久久琪琪| 亚洲一区二区三区久久| 国产精品麻豆va在线播放| 亚洲精品国产精品国自产观看浪潮| 韩国日本不卡在线| 国自在线精品视频| 国产精品久久久久久久久久免费| 亚洲欧美www| 欧美日韩色婷婷| 亚洲精品720p| 久久久久久91| 国产精品视频自拍| 欧美激情在线视频二区| 久久久在线视频| 日韩精品在线视频观看| 97在线免费观看| 久久久www成人免费精品| www.亚洲一二| 亚洲欧美国产一区二区三区| 97视频在线观看免费高清完整版在线观看| 亚洲国语精品自产拍在线观看| 久久91精品国产91久久跳| 日韩电影免费在线观看中文字幕| 色噜噜狠狠狠综合曰曰曰| 精品亚洲aⅴ在线观看| 国产91精品高潮白浆喷水| 92国产精品久久久久首页| 欧美激情va永久在线播放| 疯狂做受xxxx欧美肥白少妇| 亚洲一级片在线看| 中文字幕不卡在线视频极品| 91久久嫩草影院一区二区| 欧美激情视频在线| 91精品国产777在线观看| 国内成人精品一区| 国产丝袜视频一区| 亚洲女人初尝黑人巨大| 中文字幕亚洲综合久久筱田步美| 亚洲一区亚洲二区亚洲三区| 国产精品午夜国产小视频| 神马久久桃色视频| 91在线视频导航| 亚洲国产天堂久久综合网| 日韩视频免费观看| 亚洲网在线观看| 国产免费观看久久黄| 亚洲欧美一区二区三区四区| 欧美视频在线观看 亚洲欧| 日韩在线中文视频| 久久精品久久久久电影| 亚州成人av在线| 国产精品高潮呻吟久久av黑人| 欧美高清一级大片| 日韩免费在线播放| 91精品久久久久久久久久久久久| 亚洲电影免费观看高清完整版| 亚洲精品永久免费精品| 久久久久久国产精品三级玉女聊斋| 久久久久久久久久久av| 在线电影中文日韩| 欧美激情日韩图片| 精品久久久久久中文字幕| 日韩电影免费观看在线| 欧美肥老太性生活视频| 成人激情视频在线| 亚洲精品网址在线观看| 亚洲成人动漫在线播放| 欧美黄色性视频| 6080yy精品一区二区三区| 国产成人高潮免费观看精品| 亚洲一区二区三区四区视频| 国产精品久久久久久超碰| 精品久久久久久电影| 91在线视频导航| 精品久久久久久久久久久久久久| 97国产在线观看| 午夜精品久久久久久久99黑人| 久久综合伊人77777蜜臀| 欧美野外猛男的大粗鳮| 国产欧美精品一区二区三区介绍| 国产精品直播网红| 一区二区三区视频免费在线观看| 国产成人精品久久二区二区91| 亚洲视频在线看| 欧美在线xxx| 丝袜美腿亚洲一区二区| 久久精品视频免费播放| 国产精品久久77777| 精品综合久久久久久97| 热99在线视频| 日本欧美在线视频| 日韩亚洲国产中文字幕| 久久精品91久久香蕉加勒比| 2019日本中文字幕| 91av视频导航| 欧美成人免费全部| 中文.日本.精品| 欧美日韩亚洲网| 午夜精品99久久免费| 国产热re99久久6国产精品| 日韩av电影院| 俺去亚洲欧洲欧美日韩| 亚洲欧美日韩天堂一区二区| 国产美女久久精品| 日韩精品在线看| 国产亚洲欧美日韩精品| 中文字幕亚洲字幕| 日韩中文字幕欧美| 亚洲精品久久在线| 欧美在线视频免费观看| 亚洲精品美女在线观看| 国产日产欧美a一级在线| 色综合91久久精品中文字幕| 日韩在线中文字幕| 在线精品国产成人综合| 欧美丰满少妇xxxxx| 精品网站999www|