mrj*_*ohn 6 javascript internet-explorer
需要一种简单的方法来获取Internet Explorer中标签窗口的javascript中的唯一ID.我基本上想知道是否有类似document.tab.indexnumber的东西,但没有.所以真正的问题是,是否有任何可用于生成此内容或找出您所在的选项卡的内容?同样,我应该能够获得另一个Internet Explorer实例的另一个唯一ID?
我不能使用IE插件.
另一个复杂因素是我们可以使用随机数生成器加上时间戳作为唯一ID,如下面其中一个答案中所建议的那样.但是,如何在该选项卡的同一会话中保留相同的数字.如果我将它存储在会话变量中,则会在该会话的所有选项卡/窗口之间共享它.
我们可以将id放在url或隐藏字段中,但该解决方案将侵入网站的设计.寻找不那么具有侵入性的东西.
我正在为 ASP.Net 框架(WebForms 和 MVC 风格)定制 Session 类。
虽然很老了,但这个问题非常相关,我找不到任何其他解决该问题的方法。
因此,我分享了我编写的解决方案,以确保每个窗口和/或选项卡都有一个唯一且持久的 GUID,无论刷新、导航到网站外并返回、清理缓存等如何努力,都保持静态和安全。
这个魔法涉及window.name并由下面的 JavaScript 代码实现。该引导程序基于 jQuery,但可以轻松移植到无 jQuery 的解决方案。
请注意,此 GUID 会自动附加到任何现有的form提供服务器端引用。
UIGUID.js
编辑:windowLoadSetGUIDOnForms原始版本在for处出现错误formList.length == 1
//------------------------------------------------------------------------------
//-- 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 ------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
作为 POC,我设计了两个 HTML 脚本,展示了框架或 iFrame 中的子元素的独特性
GUIDTest.html
<html>
<head>
<script language="javascript" type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script language="javascript" type="text/javascript" src="UIGUID.js"></script>
</head>
<body onLoad="alert('Main document: ' + getWindowGUID());">
<iframe id="frame001" src="GUIDFrame.html"></iframe>
<iframe id="frame002" src="GUIDFrame.html"></iframe>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
GUIDFrame.html
<html>
<head>
<script language="javascript" type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script language="javascript" type="text/javascript" src="UIGUID.js"></script>
</head>
<body onLoad="alert('iFrame: ' + getWindowGUID());" />
</html>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11627 次 |
| 最近记录: |