2016-05-24 15 views
0

Есть ли способ открыть ссылку в новом окне после загрузки?Как закрыть окно, которое я открыл после загрузки с помощью Javascript?

Я пробовал эти два метода, но окна не закрываются.

Метод 1:

var winning = window.open("https://google.com/","","width=500,height=500"); 
winning.onload = function(){ 
    winning.close(); 
}: 

Метод 2:

var winning = window.open("https://google.com/","","width=500,height=500"); 
winning.addEventListener('onload', function(){ 
    winning.close(); 
}, false); 

Я вроде сходит с ума по этому поводу. Упускаю ли я что-то очевидное или это просто невозможно?

+0

Является ли ваш слушатель событий? Если вы заходите на консоль в качестве первой строки, она регистрируется? –

+1

Это событие называется «load», а не «onload»? Я не вижу onload, указанный в MDN: https://developer.mozilla.org/en-US/docs/Web/Events –

+0

@StephenCrosby - Событие называется 'load', которое используется для прямого доступа к обработчику событий для он называется 'onload'. Префикс с 'on' является стандартным шаблоном. (О, вы имели в виду в методе 2, я смотрел метод 1) – Quentin

ответ

2

Вы сталкиваетесь с одной и той же политикой происхождения. Вы не можете фиксировать события load на документах другого происхождения (поскольку он сообщает вам, что страница успешно загружена, что может привести к утечке информации, такой как «Пользователь зарегистрирован на этом сайте, который иначе выдавал бы запретную ошибку»).

Если я изменяю URL-адрес на один с тем же источником, что и на странице, на которой отображается JavaScript, то он работает.

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

+0

@epascarello Мне удалось закрыть окно с помощью 'setTimeout'. Неважно! Я понял, что сделал это в хакерской манере. Открыл пустое окно и изменил местоположение на ссылку, которую я хотел. – Jerry

0

Вы можете прикрепить прослушиватель событий к другому окну, но только если оба окна находятся на том же домене/протокол/порт.

Same-Origin Policy ограничивает свойства и событие, которые вы можете получить доступ к перекрестному происхождению, и в отличие от iframe (который выстреливает load события его собственного вы можете слушать), вы не можете прикрепить слушатель load события к окну, созданному с window.open исключения случаев, когда они удовлетворяют политике одного и того же происхождения.


Кроме того, на стороне записки, это опечатка:

winning.addEventListener('onload', function(){ 

Должно быть:

winning.addEventListener('load', function(){ 

Вы не включают префикс on при использовании addEventListener.

Смежные вопросы