window.open()
- это неблокирующая операция , что означает, что до открытия нового окна JavaScript перейдет к следующей строке кода. Из-за этого установка свойства может не "прилипать", если это сделано слишком рано. Я сам столкнулся с этой проблемой.
Благодаря большой помощи от Эрик Я обнаружил, что следующее, кажется, работает очень хорошо.
var popup = window.open(
url, '', 'status=0,menubar=0,toolbar=0,resizable=1,scrollbars=1'
);
$(popup.document).ready(function(){
var setPopupPropertiesInterval = setInterval(
function setPopupProperties() {
popup.myPopupCallback = function(rows)
{
// ...do stuff with rows...
};
if (popup.closed || popup.myPopupCallback) {
clearInterval(setPopupPropertiesInterval);
}
}, 1
);
});
Это будет пытаться добавить функцию во всплывающее окно, пока она не будет добавлена или всплывающее окно не будет закрыто.
В моем чрезвычайно кратком тестировании это работало в браузерах , но я не уверен в влиянии на производительность такого быстрого интервала и не имел проблем с производительностью. Обратите внимание, что большинство (все?) Браузеров на самом деле не будут запускать код с интервалами в 1 мс, но что-то немного выше, обычно 10 мс. Исключением является Chrome, который пытается приблизиться к 1 или 2 мс.
На одной машине с Windows XP под управлением IE 7 Я столкнулся с проблемой, когда браузер зависал при запуске всплывающего окна. Окно будет всплывать, но ничего не будет загружаться, и браузер станет медленно реагировать. Однако я проверил это на нескольких других машинах под управлением Windows XP и IE 7 и не смог воспроизвести проблему.