簡體   English   中英

catch 塊中的 Javascript“警報”功能僅在 chrome 中打開開發工具時才有效

[英]Javascript 'alert' function inside catch block only works when dev tools are opened in chrome

你好 StackOverflow 社區!

我遇到了一個非常奇怪的問題,找不到有關如何解決它的任何有用信息。

不知何故,只有當開發工具窗口在谷歌瀏覽器中打開(停靠或作為單獨的窗口)時,一段 javascript 代碼才有效。

原問題:由於我們的應用程序結構,我們需要在提供頁面時自動打開多個彈出窗口。 由於彈出窗口不是通過直接的用戶交互(如 onclick)打開的,現代瀏覽器會自動阻止這些彈出窗口。 由於需要重構大量代碼以避免這種情況,我們的解決方案是:

  • 檢查瀏覽器是否阻止了某些彈出窗口。
  • 如果是這樣:通知用戶這一點並建議關閉他們瀏覽器的我們網站的彈出窗口阻止功能(例如將其添加到例外列表中)。

我知道這不是一個非常優雅的解決方案,但沒有其他方法,所以請不要評論如何以不同的方式執行此操作。

javascript代碼:

let popupBlockingErrorShown = false;

this.OpenWindow = function (url, name, args) {

        var i = Popups.length; //Popups is an array defined as a global variable that keeps track of all 
                               //opened popup windows

        Popups[i] = window.open(url, name, args);

        try {

            Popups[i].focus();

        } catch (e) {

            if (!popupBlockingErrorShown) {

                alert("very user friendly message explaining to turn of popup blocking");

                popupBlockingErrorShown = true;
            }


        };
    }

窗口必須是彈出窗口。 popupBlockingErrorShown變量是為了防止每個彈出窗口都有alert消息。

在 Firefox 中運行良好。 但是在谷歌瀏覽器中有這種行為:

  • 沒有打開開發工具:第一個彈出窗口正常打開,其他彈出窗口被阻止,沒有警報消息

  • 打開開發工具:第一個彈出窗口打開但在加載時“卡住”(這是一個空頁面)。 警報消息正常顯示。

保持瀏覽器窗口打開並簡單地在打開或關閉的開發工具之間切換會產生相同的行為。

任何人都可以幫助我嗎? 非常感激!

這是我的第一個 stackoverflow 問題,我對編程還是很陌生,我有一年多的經驗。 歡迎評論我的“提問”技巧。

好的,感謝 wOxxOm 的評論,我找到了一個解決方法。 所以問題與關注哪個窗口有關。 我在catch-block添加了一段代碼來在成功打開的彈出窗口中顯示警報(如果有的話):

   try {

           Popups[i].focus();

        } catch (e) {

            if (!popupBlockingErrorShown) {
                if (Popups[i - 1]) { //there is a previous popup and it's been focused on.
                    Popups[i - 1].alert(UIMessages[33]); //show alert on opened popup.
                    popupBlockingErrorShown = true;
                }
                else {
                    alert(UIMessages[33]);
                    popupBlockingErrorShown = true;
                }
            }
        }

謝謝@wOxxOm!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM