Ich arbeite in einer benutzerdefinierten Session-Klasse für das ASP.Net-Framework (sowohl WebForms und MVC Aromen).
Obwohl sehr alt, ist diese Frage sehr relevant und ich konnte keine andere Adressierung des Problems finden.
Daher teile ich die Lösung ich codiert, um eine eindeutige und dauerhafte GUID für jedes Fenster und/oder Registerkarte zu gewährleisten, statisch und gesichert, egal wie hart man aktualisiert, navigiert außerhalb der Website und kehrt zurück, reinigt den Cache usw .
Die Magie beinhaltet window.name
und ist durch den folgenden JavaScript-Code implementiert. Der Bootstrap basiert auf jQuery, kann aber problemlos in jQuery-lose Lösungen übertragen werden.
Beachten Sie, dass diese GUID automatisch an vorhandene form
Server-seitige Referenzen angehängt wird.
UIGUID.js
Edited: die Originalversion gab einen Fehler bei windowLoadSetGUIDOnForms
für 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 ------------------------------------------------
Als POC, entwickelte ich zwei HTML-Skripten demonstriert die Einzigartigkeit auch bei Kindelementen in Frames oder iFrames
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>
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>
Wohin läuft der Code? ProcessID + ThreadID wird wahrscheinlich funktionieren, wenn der Code als IE-Addon ausgeführt wird. – EricLaw
Code läuft in Javascript in Internet Explorer 6, 7 oder 8.Ich kann kein IE-Addon für diese – mrjohn
verwenden Diese Frage ist kein Duplikat der verknüpften Antwort. Diese Frage fragt eindeutig nach dem Verknüpfen eines eindeutigen Bezeichners mit einem Registerkartenfenster in IE. Es geht nicht darum, wie man eine GUID erstellt (obwohl das Teil der Antwort sein könnte). – Sarus