Откройте новую вкладку, затем прослушайте событие, которое будет запущено

Возможно ли в Javascript открыть новую вкладку, а затем послушать эту вкладку, запускающую событие?

Я видел это для прослушивания определенных событий табуляции, но вместо window я могу настроить таргетинг на определенную вкладку, которую я открыл?

2 ответа

Мне кажется, это хорошо работает для меня

В родительском окне

var form = window.open('/formsv2/add', '_blank', 'resizable=1', true);
form.addEventListener('formAdded', function(data) {
 console.log('formAddedEvent');
 console.log(data.name);
 console.log(data.id);
 $('#formIdSelect').append('<option value="'+data.id+'">'+data.name+'</option>').val(data.id);
});

В всплывающем окне

var evt = document.createEvent("Events")
evt.initEvent('formAdded', true, true); //true for can bubble, true for cancelable
evt.name = $('#title').val();
evt.id = data.form;
document.dispatchEvent(evt);


Нет, вы не можете. Ну, не прямо.

По очевидным причинам безопасности javascript может получать доступ только к данным из собственной вкладки/окна. Однако вы можете использовать файлы cookie, locastorage или... для хранения и чтения данных из того же домена.

Вы можете добавить EventListner в объект localstorage (общий для доменов). Soundcloud, например, делает это.

Изменить: Я думаю, что есть путаница между window.open и новой вкладкой.

window.open открывает всплывающее окно. Затем вы можете получить доступ к этому всплывающему окну из своего сценария. Обратите внимание, однако, что поведение отображения всплывающих окон зависит от браузера и браузера. Некоторые открывают его на новой вкладке, некоторые в новом окне... Обратите внимание, что для доступа к всплывающему окну он должен быть одним и тем же доменом, протоколом, портом,...

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

licensed under cc by-sa 3.0 with attribution.