Сообщение в открывшемся окне браузера из обратного вызова в Internet Explorer 11.0.x
Я пытаюсь написать обратный вызов в моем приложении, которое открывает всплывающее окно, делает некоторые вещи и отвечает на окно всплывающего окна, чтобы пометить действие как завершенное.
Всплывающее окно использует window.opener.postmessage()
способ связи с открывающим окном в браузере.
Это работает в большинстве браузеров. Однако Internet Explorer 11.0.x не может отправлять сообщения, тогда как 11.192.x может. Я не проверял с IE,9/10.
Ошибка Permission Denied
а также window.opener
является undefined
Есть ли способ решить эту проблему и заставить мое всплывающее окно отправлять сообщение в открывающее окно в Internet Explorer 11.0.x?
Благодарю.
1 ответ
Я не пробовал это в Internet Explorer, но дайте мне знать, работает ли он для вас.
Создайте пустой объект для хранения ваших данных в объекте окна.
например.
window._myData = {};
Создайте функцию на объекте окна. Функция - это то, что вы хотите сделать, устанавливает данные и вызывается при закрытии нового окна.
например.
window._popupClosing = function(data){
this._myData = data;
console.log('done....', this._myData);
};
Откройте ваше всплывающее окно.
например.
var w = window.open('https://google.com','_blank');
Установите таймер, чтобы проверить, было ли окно закрыто. Затем запустите свою функцию.
например.
var timer = setInterval(function(){
if(w.closed){
clearInterval(timer);
window.parent._popupClosing(window.location.href);
}
}, 1000);
Не забудьте закрыть новое всплывающее окно из скрипта во всплывающем окне, используя
window.close();
Объединяя эти
window._myData = {};
window._popupClosing = function(data){
this._myData = data;
console.log('done....', this._myData);
};
var w = window.open('https://google.com','_blank');
var timer = setInterval(function(){
if(w.closed){
clearInterval(timer);
window.parent._popupClosing(window.location.href);
}
}, 1000);
Не забудьте закрыть новое всплывающее окно, когда вы закончите. window.close();
Если вы можете опубликовать свои данные в конечной точке, а затем извлечь данные из конечной точки с помощью функции закрытия всплывающих окон, это будет лучше, чем отправка данных между окнами. Я думаю.