第二个选项卡禁用

时间:2018-02-10 08:23:31

标签: javascript

有没有办法检测我的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!");

});

2 个答案:

答案 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请求,如果得到响应,我们可以得出结论,当前有一个选项卡处于打开状态。

  • 每个标签都出于安全原因而被隔离,因此无法从另一个标签访问会话。如果用户未明确注销。无法知道没有选项卡或未打开。