成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript如何給JavaScript文件傳遞參數

開發 后端
下面是幾個使用JavaScript給JavaScript文件傳遞參數的例子。

一、利用全局變量進行船體參數
這是最簡單的一種方式,比如Google Adsense:


 程序代碼


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


 程序代碼
// 變體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)中的內存設置詳解
責任編輯:王觀 來源: 動態網站制作指南
相關推薦

2019-04-17 13:48:19

JavaScript前端傳遞

2020-05-20 08:57:14

JavaScript讀取文件開發

2021-04-29 00:08:21

JavaScript 檢測文件

2021-05-08 00:00:27

JavaScript ZIP文件

2009-06-10 21:51:42

JavaScript XMLFirefox

2011-03-15 13:45:49

JavaScript后續傳遞

2021-04-19 05:41:04

JavaScript大文件下載

2017-12-05 08:53:20

Golang參數傳遞

2021-02-05 07:33:05

JavaScript參數ES6

2024-04-10 13:59:44

JavaScript內存

2010-01-06 13:51:15

Javascript傳

2020-08-23 18:08:29

JavaScript命名參數位置參數

2021-06-01 05:15:36

JavaScript 前端大文件并發上傳

2009-04-23 13:19:21

創建XMLXML文件Javascript

2025-02-12 10:51:51

2010-07-30 12:56:02

Flex調用JavaS

2012-03-13 09:54:42

JavaScript

2021-05-09 19:41:35

JavaScript 前端同源通信

2019-02-26 13:00:11

JavaScriptURL前端

2021-04-22 07:41:46

JavaScript類型轉換
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99精品视频网 | 综合五月| 日本精品一区二区在线观看 | 成人av电影免费在线观看 | 久久专区 | 久久99精品久久久久 | 日韩亚洲一区二区 | 精品国产乱码久久久久久中文 | 嫩草网 | 国产日韩欧美一区二区 | 在线视频亚洲 | 男人的天堂久久 | 国产精品久久久久久久免费大片 | 午夜影院在线免费观看视频 | 国产精品视频yy9299一区 | 欧美精品一区二区在线观看 | 欧美一区二区在线观看 | 久热国产精品视频 | 亚洲精品乱码久久久久v最新版 | 国产乱码精品一区二区三区五月婷 | 岛国毛片在线观看 | 99久久精品免费看国产四区 | 在线中文字幕视频 | 成人国产在线视频 | 中文字幕视频在线观看免费 | 国产日韩精品久久 | 国产精品视频一区二区三区 | 欧美精品一区二区三区蜜桃视频 | 午夜黄色 | 中文字幕亚洲欧美日韩在线不卡 | 五月天综合网 | 日本网站免费观看 | 一区二区三区国产好的精 | 欧美三区在线观看 | 91免费在线看 | 欧美日韩亚洲在线 | 日本午夜精品 | 亚洲欧洲精品成人久久奇米网 | 中文视频在线 | 精品国产一区二区在线 | 日本久久一区二区三区 |