почему window.open () не работает напрямую в теге <script>? - PullRequest
0 голосов
/ 31 августа 2018

Кажется, что функция window.open () javascript не работает напрямую в теге скрипта, она должна быть внутри функции, и эта функция должна вызываться. Почему это так и спасибо?

Пример:

//Not working
<div>
<button> Click here </button>
</div>
<script>
var w = window.open("http://www.stackoverflow.com/");
</script>

//Working
<div>
<button onclick=n()> Click here </button>
</div>
<script>
function n(){
var w = window.open("http://www.stackoverflow.com/");
}
</script>

Ответы [ 4 ]

0 голосов
/ 31 августа 2018

window.open будет работать и не работать. Но есть проблема, когда вы вызываете его без присутствия фактического действия пользователя . Блокировщик всплывающих окон в браузере будет мешать открытию нового окна / вкладки.

Вы увидите это предупреждение в своем браузере.

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

Вы также можете заставить его работать, добавив вызов к window.open в действии пользователя, например:

<script>
window.addEventListener("click", function() {
  window.open("https://www.stackoverflow.com/");
});
</script>

Это будет работать, когда вы нажмете на окно.

0 голосов
/ 31 августа 2018

В этом коде «w» равно нулю, и окно не открывается, потому что вы можете открыть новое окно только в результате действий человека (например, щелчка по кнопке).

<div>
<button> Click here </button>
</div>
<script>
var w = window.open("http://www.stackoverflow.com/");
</script>

Это сделано специально для того, чтобы сайты не открывали случайные новые окна без согласия пользователя.

0 голосов
/ 31 августа 2018

В первом примере вы только что присвоили функцию open () переменной; Вы фактически не вызывали (не вызывали) функцию каким-либо образом.

Вы можете сделать это, подключив прослушиватель событий к кнопке, чтобы функция запускалась при нажатии:

const button = document.getElementsByTagName('button')[0];

button.addEventListener("click", function() {
  window.open("https://www.stackoverflow.com/");
});
<div>
  <button>Click here</button>
</div>

Или автоматически активировать функцию при нагрузке:

window.onload = function() {
  window.open("https://www.stackoverflow.com/");
};

Примечание: ни один из моих примеров не откроет здесь новое окно из-за политик безопасности.
Они будут работать в приложении.

0 голосов
/ 31 августа 2018

Возможно, потому что DOM еще не готов. Попробуйте:

document.addEventListener("DOMContentLoaded", function() { 
    window.open("https://www.stackoverflow.com/");
});

Кроме того, это может быть обнаружено блокировщиком всплывающих окон в вашем браузере.

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