最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

給js文件傳參數(詳解)

 更新時間:2014年07月13日 15:43:12   投稿:mdxy-dxy  
這篇文章主要介紹了給js文件傳參數的方法,需要的朋友可以參考下

一、利用全局變量

這是最簡單的一種方式,比如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的順序執(zhí)行機制(js文件的加載可以是同步或異步方式,但執(zhí)行時,一定是按照在文檔流中的順序來執(zhí)行的)。當某個js文件執(zhí)行時,一定是“已加載”的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'));
}

相關文章

  • javaScript 計算兩個日期的天數相差(示例代碼)

    javaScript 計算兩個日期的天數相差(示例代碼)

    本篇文章主要介紹了javaScript 計算兩個日期的天數相差(示例代碼) 需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • JavaScript基于libgif.js實現控制gif動畫幀

    JavaScript基于libgif.js實現控制gif動畫幀

    這篇文章主要為大家詳細介紹了JavaScript如何利用libgif.js插件控制gif動畫幀,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-02-02
  • JavaScript中具名函數的多種調用方式總結

    JavaScript中具名函數的多種調用方式總結

    這篇文章主要介紹了JavaScript中具名函數的多種調用方式總結,本文總結了4種方法,需要的朋友可以參考下
    2014-11-11
  • Javascript實現拖拽排序的代碼

    Javascript實現拖拽排序的代碼

    這篇文章主要介紹了Javascript實現拖拽排序的代碼,本文在vue運行環(huán)境下給大家演示下效果圖,對js拖拽排序實例代碼感興趣的朋友跟隨小編一起看看吧
    2022-09-09
  • 使用JS實現鼠標放上圖片進行放大離開實現縮小功能

    使用JS實現鼠標放上圖片進行放大離開實現縮小功能

    這篇文章主要介紹了使用JS實現鼠標放上圖片進行放大離開實現縮小功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 原生javascript實現的一個簡單動畫效果

    原生javascript實現的一個簡單動畫效果

    下面小編就為大家?guī)硪黄鷍avascript實現的一個簡單動畫效果。小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-03-03
  • 微信小程序實現文字跑馬燈

    微信小程序實現文字跑馬燈

    這篇文章主要為大家詳細介紹了微信小程序實現文字跑馬燈,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 深入理解JavaScript系列(34):設計模式之命令模式詳解

    深入理解JavaScript系列(34):設計模式之命令模式詳解

    這篇文章主要介紹了深入理解JavaScript系列(34):設計模式之命令模式詳解,命令模式(Command)的定義是:用于將一個請求封裝成一個對象,從而使你可用不同的請求對客戶進行參數化,對請求排隊或者記錄請求日志,以及執(zhí)行可撤銷的操作,需要的朋友可以參考下
    2015-03-03
  • js控制網頁背景音樂播放與停止的方法

    js控制網頁背景音樂播放與停止的方法

    這篇文章主要介紹了js控制網頁背景音樂播放與停止的方法,實例分析了javascript控制背景音樂的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • 深入解析微信小程序開發(fā)中遇到的幾個小問題

    深入解析微信小程序開發(fā)中遇到的幾個小問題

    這篇文章主要介紹了微信小程序開發(fā)中遇到的幾個小問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07

最新評論

宜宾县| 中西区| 卢氏县| 南昌市| 习水县| 和田县| 吉林省| 鹤岗市| 太仆寺旗| 阜新市| 南通市| 右玉县| 静海县| 离岛区| 九龙县| 开封市| 普兰店市| 南靖县| 河北省| 会理县| 河南省| 寿阳县| 瑞丽市| 泰安市| 新野县| 莱州市| 行唐县| 株洲市| 邹城市| 航空| 固始县| 五莲县| 贺兰县| 吉隆县| 思南县| 方山县| 九龙县| 搜索| 顺昌县| 罗平县| 体育|