Замечена проблема с управлением всплывающим окном, которое необходимо для реализации словаря на сайте.
Имеется функция, открывающая и закрывающая окошко: var winexist=false; function WinOpen(url) { if (!window.closed){ if (winexist==true) { WinClose(); winexist=false; }{ WinName=window.open(url,"DisplayWindow","top=350,left=0,toolbar=no,directories=no,menubar=no,status=yes,scrollbars=no,width=250,height=150,location=no,resizable=no"); winexist=true; } } } function WinClose() { WinName.window.close(); }
Однако, если вспомогательное окно словаря закрывается пользователем (стандартным крестиком), то функция начинает сбоить. Что следует сделать для стабильной работы с окном?
|
В Вашем случае не вполне понятно зачем нужна переменная winexit, но сама проблемная ситуация очень прозрачна. Следует быть готовым к ошибке исполнения при обращении к погашенному, но не разрушенному в памяти объекту. Проблема не только в том, что сам объект может оказаться даже и не окном (а, например, закладкой броузера) и неуникальным элементом (клон окна, открытый клавишами CTR+N). Основная проблема состоит в существовании объекта окна без каких-либо доступных свойств, по которым его можно идентифицировать.
Вам следует в ответственном фрагменте кода разместить обработку возможных ошибок: try { if (!window.closed){ if (winexist==true) { WinClose(); winexist=false; }{ WinName=window.open(url,"DisplayWindow","top=350,left=0,toolbar=no,directories=no,menubar=no,status=yes,scrollbars=no,width=250,height=150,location=no,resizable=no"); winexist=true; } } } catch (e) { WinName=window.open(url,"DisplayWindow","top=350,left=0,toolbar=no,directories=no,menubar=no,status=yes,scrollbars=no,width=250,height=150,location=no,resizable=no"); winexist=true; }
Скорее всего, все проблемы будут решены автоматически.
Владимир Кошин Руководитель и консультант студии веб-дизайна "Жанр" |