Need a Unique ID in javascript for tab windows and for new windows in Internet Explorer
本问题已经有最佳答案,请猛点这里访问。
需要一种简单的方法来获取Internet Explorer中选项卡窗口的javascript中的唯一ID。我基本上是想知道是否有像document.tab.indexnumber这样的东西,但没有。所以真正的问题是,是否有什么东西可以用来生成这个,或者找出你在哪个选项卡中?同样,我应该能够为另一个Internet Explorer实例获取另一个唯一的ID?我不能用IE插件。
另一个复杂的问题是,我们可以使用随机数生成器加上时间戳作为唯一ID,如下所示,在其中一个答案中。但是我如何在同一个会话中为该选项卡保留相同的数字呢?如果我将它存储在会话变量中,它将在该会话的所有选项卡/窗口之间共享。
我们可以将ID放在URL或隐藏字段中,但该解决方案会干扰网站的设计。寻找一些不那么具有侵入性的东西。
我正在为ASP.NET框架(WebForms和MVC风格)定制会话类。
这个问题虽然很老,但很切题,我找不到其他任何解决问题的方法。
因此,我共享我编写的解决方案,以确保每个窗口和/或选项卡具有唯一和持久的GUID,无论刷新多么困难,都保持静态和安全,在站点外导航并返回,清理缓存等。
magic涉及
请注意,此guid将自动附加到任何提供服务器端引用的现有
乌伊吉德
已编辑:原始版本在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | //------------------------------------------------------------------------------ //-- guarantees that window.name is a GUID, and that it would //-- be preserved whilst window life cicle //-- //-- for frames and iframes, the outermost window determines the GUID //-- //-- for every form it will be appended a hidden element of id //--"this.window.GUID" for server-side references //------------------------------------------------------------------------------ //-- window.name will be set to"GUID-<A_GUID>" //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ //-- Retrieves window GUID, initializing it if necessary ----------------------- //------------------------------------------------------------------------------ function getWindowGUID() { //---------------------------------- var windowGUID = function () { //---------- var S4 = function () { return ( Math.floor( Math.random() * 0x10000 /* 65536 */ ).toString(16) ); }; //---------- return ( S4() + S4() +"-" + S4() +"-" + S4() +"-" + S4() +"-" + S4() + S4() + S4() ); }; //---------------------------------- //-- traverses up in the hierarchy for the outermost window ---------------- var topMostWindow = window; while (topMostWindow != topMostWindow.parent) { topMostWindow = topMostWindow.parent; } //-- initialize GUID if needed --------------------------------------------- if (!topMostWindow.name.match(/^GUID-/)) { topMostWindow.name ="GUID-" + windowGUID(); } //-- return GUID ----------------------------------------------------------- return topMostWindow.name; } //-- getWindowGUID ----------------------------------------------------------- //------------------------------------------------------------------------------ //-- Append via jQuery handlers for windowLoad --------------------------------- //------------------------------------------------------------------------------ $(window).load( function () { windowLoadSetGUID(); windowLoadSetGUIDOnForms(); } ) //---------------------------------------------------------------------------- function windowLoadSetGUID() { var dummy = getWindowGUID(); } //-- windowLoadSetGUID ------------------------------------------------------- function windowLoadSetGUIDOnForms() { var formList = $('form'); var hidGUID = document.createElement("input"); hidGUID.setAttribute("type","hidden"); hidGUID.setAttribute("name","this.window.GUID"); hidGUID.setAttribute("value", getWindowGUID()); if (formList.length == 1) { formList.append(hidGUID); } else { for (var i = 0; i < formList.length; ++i) { formList[i].append(hidGUID); } } } //-- windowLoadSetGUIDOnForms ------------------------------------------------ |
作为POC,我设计了两个HTML脚本,演示了框架或i frames中的子元素的唯一性。
指南HTML
1 2 3 4 5 6 7 8 9 10 | <html> <head> <script language="javascript" type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"> <script language="javascript" type="text/javascript" src="UIGUID.js"> </head> <body onloadx="alert('Main document: ' + getWindowGUID());"> <iframe id="frame001" src="GUIDFrame.html"></iframe> <iframe id="frame002" src="GUIDFrame.html"></iframe> </body> </html> |
指南框架
1 2 3 4 5 6 7 | <html> <head> <script language="javascript" type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"> <script language="javascript" type="text/javascript" src="UIGUID.js"> </head> <body onloadx="alert('iFrame: ' + getWindowGUID());" /> </html> |