У меня есть файл JavaScript, прикрепленный к веб-странице с именем «navigate.js». Он содержит коллекцию методов, которые выглядят следующим образом:
var ContractWindow;
function showContract(ContractID){
try{
if(ContractWindow){
if(!ContractWindow.closed){
ContractWindow.close;
}
}
ContractWindow = window.open(contract.aspx?contractid=" + ContractID, "ContractEditor",
"toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=1,width=780,height=615");
}
}catch(exc){
alert(exc.message);
}
}
(существуют аналогичные функции для открытия страниц для редактирования категорий продуктов, продукты, регионы и т. д.)
Каждая из нескольких функций открывает отдельную страницу редактора в своем собственном окне с целью создания только одного окна любого данного типа (гдеtype = "ContractEditor") должен быть открыт в любой момент времени.
Если редактор (в данном случае Редактор контракта) используется повторно, мы сначала хотим закрыть предыдущее окно, чтобы последующее window.open
вызвалоновое окно, которое появляется перед любыми окнами (имейте фокус).
Все работает как положено , пока страница не будет простаивать в течение приблизительно 10 минут.После чего предупреждающее сообщение гласит: Вызванный объект отключился от своих клиентов
Различные тесты показали, что исключение происходит из-за присвоения возвращаемого значения window.open переменной ContractWindow,Если я пропущу ContractWindow =
и просто позвоню window.open
, оно будет работать, но окно не «выскочит» на передний план, что является обязательным требованием.(window.open повторно использует существующее окно с именем «ContractEditor», но не переносит его из стека открытых окон.)