摘要:進(jìn)入報(bào)表頁面的入口不是固定的頁面,也不是固定的按鈕,因此不同種類的報(bào)表傳遞的參數(shù)不同,并且各組參數(shù)之間沒什么共同性。鑒于以上幾點(diǎn),我利用父子頁面能夠互相訪問對(duì)方對(duì)象的特性,想了一個(gè)頁面間隱式傳遞參數(shù)的方式。
該文寫于 2012-08-10
在工作的開發(fā)過程中有個(gè)查看報(bào)表的需求——從某個(gè)頁面點(diǎn)擊按鈕打開報(bào)表頁面(該頁面為新建窗口)。進(jìn)入報(bào)表頁面的入口不是固定的頁面,也不是固定的按鈕,因此不同種類的報(bào)表傳遞的參數(shù)不同,并且各組參數(shù)之間沒什么共同性。原本的實(shí)現(xiàn)方式是通過 URL 的 queryString 將參數(shù)傳遞到報(bào)表頁面,正如前面所說,不同種類的報(bào)表傳遞的參數(shù)不同,于是報(bào)表頁面就會(huì)出現(xiàn)以下一些問題:
URL 過長(zhǎng),看起來很不美觀;
需要對(duì) queryString 進(jìn)行解析與判斷來判別是什么類型的報(bào)表;
如果未來多加一些類型的報(bào)表的話,判斷也會(huì)隨之增多,這樣不僅代碼量增加,維護(hù)起來也有點(diǎn)困難,還影響性能;
安全性欠佳,通過 queryString 找到規(guī)律的話,通過瀏覽器地址欄隨便地輸入一個(gè)符合規(guī)律的 URL 就能獲得想要看的數(shù)據(jù)。
鑒于以上幾點(diǎn),我利用父子頁面能夠互相訪問對(duì)方 window 對(duì)象的特性,想了一個(gè)“頁面間隱式傳遞參數(shù)”的方式。
父頁面(入口頁面) JavaScript 代碼javascriptwindow.windowPool = []; // 用于存儲(chǔ)子頁面的 window 對(duì)象及隱式傳遞的參數(shù) var newWin = window.open( url ), // 新建窗口,url 為報(bào)表頁面地址 reportParams = {}; // 報(bào)表所需參數(shù) window.windowPool.push({ "window": newWin, "parameter": reportParams });
看到上段代碼,也許會(huì)奇怪地問:“為什么要將子頁面的 window 對(duì)象和報(bào)表參數(shù)分開,而不是將報(bào)表參數(shù)綁定在子頁面的 window 對(duì)象上?”這是因?yàn)樽禹撁嫒绻⑿铝说脑?,?bào)表參數(shù)就會(huì)失效了。將子頁面(報(bào)表頁面)的 window 對(duì)象與報(bào)表參數(shù)組合成一個(gè) JSON 添加到數(shù)組里是為了避免當(dāng)從父頁面(入口頁面)打開多個(gè)顯示不同種類報(bào)表的報(bào)表頁面時(shí),早先打開的報(bào)表頁面刷新操作而引起的顯示后打開的報(bào)表頁面內(nèi)容的問題。
子頁面(報(bào)表頁面) JavaScript 代碼javascriptvar params, index = 0; for( ; index < opener.windowPool.length; index++ ) { if ( opener.windowPool[index].window === window ) { params = opener.windowPool[index].parameter; break; } }
該方式在除了 IE6 之外的瀏覽器都能正常運(yùn)行,IE6 沒測(cè)試過,不清楚兼容性如何。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/91514.html
摘要:,表明執(zhí)行操作的字符串。,這個(gè)屬性可以指示系統(tǒng)如何啟動(dòng)一個(gè),以及啟動(dòng)之后如何處理。是一個(gè)字符串,例如這里的的構(gòu)造函數(shù)傳入了兩個(gè)參數(shù),和組件名,調(diào)用了方法后,會(huì)在當(dāng)前的應(yīng)用中啟動(dòng)這個(gè)服務(wù)。 1. 前言 ? ? ? ?在Android中有四大組件,這些組件中有三個(gè)組件與Intent相關(guān),可見Intent在Android整個(gè)生態(tài)中的地位高度。Intent是信息的載體,用它可以去請(qǐng)求組件做相應(yīng)...
摘要:瀏覽器總是運(yùn)行位于作用域鏈頂部的當(dāng)前執(zhí)行上下文。作用域的前端永遠(yuǎn)是當(dāng)前執(zhí)行代碼所在環(huán)境的變量對(duì)象而全局執(zhí)行環(huán)境的變量對(duì)象始終是作用域鏈中的最后一個(gè)對(duì)象。調(diào)用棧為了達(dá)到當(dāng)前執(zhí)行位置所調(diào)用的所有函數(shù)。 ECMAScript中的變量值類型 基本類型 : Number, String, Boolean, Undefined, Null 引用類型 : Object, Array, Func...
摘要:總結(jié)方法自執(zhí)行時(shí),指向,被對(duì)象調(diào)用時(shí),指向?qū)ο蟆?梢杂煤透淖冎赶颉? 總結(jié): 方法自執(zhí)行時(shí),this指向window,被對(duì)象調(diào)用時(shí),this指向?qū)ο?。可以用call(),apply()和bind()改變this指向。 默認(rèn)綁定 全局環(huán)境中this默認(rèn)綁定到window console.log(this); //window ...
摘要:調(diào)用棧就是為了到達(dá)當(dāng)前執(zhí)行位置所調(diào)用的所有函數(shù)。由于無法控制回調(diào)函數(shù)的執(zhí)行方式,因此就沒有辦法控制調(diào)用位置得到期望的綁定,下一節(jié)我們會(huì)介紹如何通過固定來修復(fù)這個(gè)問題。 在《你不知道的this》中我們排除了對(duì)于this的錯(cuò)誤理解,并且明白了每個(gè)函數(shù)的this是在調(diào)用時(shí)綁定的,完全取決于函數(shù)的調(diào)用位置。在本節(jié)中我們主要介紹一下幾個(gè)主要內(nèi)容: 什么是調(diào)用位置 綁定規(guī)則 this詞法 調(diào)用...
閱讀 1298·2023-04-26 00:47
閱讀 3628·2021-11-16 11:53
閱讀 861·2021-10-08 10:05
閱讀 2821·2021-09-22 15:19
閱讀 3037·2019-08-30 15:55
閱讀 2818·2019-08-29 16:55
閱讀 3012·2019-08-29 15:20
閱讀 1173·2019-08-23 16:13