有没有办法检测我的Web应用程序是否在第二个选项卡中加载并阻止它从第二个选项卡加载? 我要求Web应用程序只能在一个选项卡上运行,不应该在第二个选项卡上加载。 我使用了这段代码并且它完美地运行,因为它在我的第一个选项卡上发出第二个选项卡已加载的警报但我希望该警报在第二个选项卡上显示为对不起已经有一个选项卡已打开。
function register_tab_GUID() {
// detect local storage available
if (typeof (Storage) !== "undefined") {
// get (set if not) tab GUID and store in tab session
if (sessionStorage["tabGUID"] == null) sessionStorage["tabGUID"] = tab_GUID();
var guid = sessionStorage["tabGUID"];
// add eventlistener to local storage
window.addEventListener("storage", storage_Handler, false);
// set tab GUID in local storage
localStorage["tabGUID"] = guid;
}
}
function storage_Handler(e) {
// if tabGUID does not match then more than one tab and GUID
if (e.key == 'tabGUID') {
if (e.oldValue != e.newValue) tab_Warning();
}
}
function tab_GUID() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4() + s4() + s4();
}
function tab_Warning() {
//alert("Another tab is open!");
});
答案 0 :(得分:0)
尝试使用
Animal<Wolf>
或
if (!window.sessionStorage['tabGUID']) window.sessionStorage['tabGUID'] = tabGUID();
除非您首先将该值(if (window.sessionStorage['tabGUID'] !== undefined) window.sessionStorage['tabGUID'] = tabGUID();
)设置为null,否则对null进行测试将始终返回false。因为默认情况下,当对象中不存在某个键时,JS会返回undefined。
答案 1 :(得分:0)
-使警报返回当前选项卡的唯一方法是发送请求以检查该会话是否存在。可以使用一个简单的api请求,如果得到响应,我们可以得出结论,当前有一个选项卡处于打开状态。