Слушатели событий не работают во всплывающем окне при закрытии родительского окна. - PullRequest
0 голосов
/ 23 марта 2019

Я хочу, чтобы моя кнопка печати работала во всплывающем окне, но проблема в том, что когда я закрываю родительское окно или перехожу по другому URL-адресу в родительском окне, кнопка печати из моего всплывающего окна не работает.

Прослушиватели событий не работают во всплывающем окне, возможно, они исчезают вместе с родительским окном.

Примечание: это работает нормально, когда есть родительское окно

Ниже приведен код, который я использую, пожалуйста, помогите мне

<!DOCTYPE html>
<html>
<body>

<p>Click the button to open a new window, and assure that the new window GETS focus (send the new window to the front).</p>

<button onclick="myFunction()">Try it</button>

<script>
function myFunction() {
  var myWindow = window.open("", "_blank", "width=200,height=100");
  myWindow.document.write("<p>A new window!</p>");
   var printButton = myWindow.document.createElement('BUTTON');
   var buttonNode = myWindow.document.createTextNode('PRINT');
    printButton.appendChild(buttonNode);
    myWindow.document.body.insertAdjacentHTML('beforeend',             printButton.outerHTML);
   var btn = myWindow.document.querySelector('button');
   btn.addEventListener('click', () => {
    myWindow.window.print();
    });
}
</script>

</body>
</html>

1 Ответ

1 голос
/ 27 марта 2019

Вместо использования addEventListener вместо этого используйте атрибут onclick, чтобы он был постоянным.

Демо: https://codepen.io/craigiswayne/pen/moYYga

function myFunction() {
  var myWindow = window.open("", "_blank", "width=500,height=500");
  myWindow.document.write("<p>A new window!</p>");

  var printButton = myWindow.document.createElement('BUTTON');
  printButton.innerHTML = "PRINT";
  printButton.setAttribute("onclick", "window.print()");
  myWindow.document.body.appendChild(printButton);
}
<p>Click the button to open a new window, and assure that the new window GETS focus (send the new window to the front).</p>

<button onclick="myFunction()">Try it</button>

Причина, по которой вы не работали, заключалась в том, что после смены родителя не было ссылки на исходный обработчик событий.

Приведенный выше код не будет работать в StackOverflow из-за изолированной среды среды iframe, в которой выполняется код. Поэтому я добавил ссылку codepen, чтобы продемонстрировать решение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...