Это Chrome Bug? Как я могу решить? : Он пропускает некоторые комментарии в функции открывающего - PullRequest
1 голос
/ 17 мая 2019

Я высветил всплывающее окно.И всплывающее окно вызвало функцию открытия, которая имеет несколько предупреждений.Но Chrome пропустил предыдущее предупреждение и выполнил последнее предупреждение.

Это ошибка браузера Chrome?

main.html

<html>
<head>
    <script type="text/javascript"><!--
    function popUp(){
        winobject = window.open("pop.html", "popName","left=100,top=100,toolbar=no,status=yes,menubar=no,width=200,height=200");
    }

    function fnCallBack(param) {
        alert("1. msg (" + param + ")");
        alert("2. msg (" + param + ")");
    }

    function alertN() {
		alert("1. alert");
		alert("2. alert");
    }
</script>
</head>
<body>
	<input type="button" value="alertN" onclick="alertN();" onkeypress="alertN();" />
	<input type="button" value="popUp" onclick="popUp();" onkeypress="popUp();" />
</body>
</html>

pop.html

<html>
<head> 
<script type="text/javaScript" ><!--
function pressOk(){
            opener.fnCallBack("From Pop");
	    	window.close();
}
</script>
</head>
<body>
<input type="button" value="OK" onclick="pressOk();" />
</body>
</html>

Когда я нажимаю кнопку «ОК» во всплывающем окне, Chrome отображает только «2. msg ...».

1 Ответ

2 голосов
/ 17 мая 2019

Это из-за политики в Chrome :

alert() Диалоги не активируют свою вкладку.Если alert() вызывается из фоновой вкладки, вызов немедленно возвращается.Вкладка помечена индикатором, и пользователь увидит диалоговое окно, когда перейдет на вкладку.

Итак, что здесь происходит, так это то, что когда вызывается первая alert(), главная вкладка находится в фоновом режиме, поэтому вызов немедленно возвращается вместо остановки выполнения кода.Это приводит к выполнению второго alert(), но страница все еще находится в фоновом режиме, поэтому вызов также немедленно возвращается.Затем функция завершается и window.close() выполняется.Всплывающее окно закрывается, и фокус возвращается на главную страницу.Наконец, поскольку второе alert() было выполнено последним, Chrome отображает второе сообщение.

Сравните это поведение с Firefox, который не сразу возвращает вызовы alert() на фоновых страницах - вы будетеувидеть оба сообщения, и всплывающее окно будет оставаться открытым, пока вы не нажмете «ОК» на втором.

...