[英]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.