Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle APEX Новый топик    Ответить
 Перестал работать вызов window.close()  [new]
Титов Артем
Member

Откуда: МО
Сообщений: 299
Добрый день!

APEX 19.2

Есть страница с формой, которая открывается в отдельной вкладке браузера. И на странице с формой есть кнопка "Закрыть".
Кнопка обращалась к URL "javascript:window.close();" Ранее она работала. Но сейчас, после обновления страницы, перестала.
При этом если страницу просто открыть и нажать на эту кнопку, то вкладка закрывается.
Думаю, в обновлениях браузера что-то изменилось в плане безопасности.

В консоли видно ошибку JS: Scripts may close only the windows that were opened by them

В сети есть рецепты, но они не работают.

Я создал пустую страницу и делаю на кнопке редирект на нее по команде "javascript:window.open('f?p=950:215:&SESSION.','_self','');"
В итоге страницу открывает скрипт, но попытка ее закрытия по скрипту все равно приводит к этой ошибке и она не закрывается. Использование стандартного для APEX Close Dialog тоже не работает с такой же ошибкой.

Может сталкивался кто-то? Подскажите, где копать...

Спасибо!
18 фев 21, 12:36    [22282717]     Ответить | Цитировать Сообщить модератору
 Re: Перестал работать вызов window.close()  [new]
DHDD
Member

Откуда:
Сообщений: 103
Титов Артем,

сравни полные адреса основной страницы и открытой вкладки.

если домены отличаются - доступа не будет (новая безопасность).
если одинаковые - всё работает.

1. открываем эту страницу форума.
2. в консоли: newtab=window.open('https://www.sql.ru/forum/1333599/perestal-rabotat-vyzov-window-close');
3. затем: newtab.close()
4. вкладка закрылась.

если в пункте (1) будет другой домен - не сработает (поменяется только свойство newtab.closed с "false" на "true").
18 фев 21, 13:02    [22282747]     Ответить | Цитировать Сообщить модератору
 Re: Перестал работать вызов window.close()  [new]
Sah
Member

Откуда: Moscow
Сообщений: 247
Этот сценарий и у ТС работает. Проблема начинается после перезагрузки странцы. Ошибка говорит, что JavaScript'ом можно закрыть только то окно, которое открывалось скиптом с той же страницы. Видимо, при перезагрузке теряется информация о окне-родителе. Что с этим делать, я не знаю.
19 фев 21, 08:52    [22283250]     Ответить | Цитировать Сообщить модератору
 Re: Перестал работать вызов window.close()  [new]
Титов Артем
Member

Откуда: МО
Сообщений: 299
DHDD
Титов Артем,

сравни полные адреса основной страницы и открытой вкладки.

если домены отличаются - доступа не будет (новая безопасность).
если одинаковые - всё работает.

1. открываем эту страницу форума.
2. в консоли: newtab=window.open('https://www.sql.ru/forum/1333599/perestal-rabotat-vyzov-window-close');
3. затем: newtab.close()
4. вкладка закрылась.

если в пункте (1) будет другой домен - не сработает (поменяется только свойство newtab.closed с "false" на "true").


Ваш пример показал мне, где капать.

В итоге заработало вот так:

1) В SQL-запросе в Interactive Report оформил поле со ссылкой на открытие страницы с формой в виде:
:V_HOST||'/apex/'||APEX_UTIL.PREPARE_URL(p_url => 'f?p='||:APP_ID||':'||t.page_num||':'||:APP_SESSION||'::::P'|| t.page_num||'_ID:'||t.ID)  as  F_LINK

:V_HOST - тут доменное имя, с которого запущено APEX-приложение. Ранее ссылка была оформлена просто через APEX_UTIL.PREPARE_URL
2) В Interactive Report Target для Link оформляю в виде URL "javascript:window.open('#F_LINK#');" . Таким образом страница с формой открывается через скрипт.
3) На странице с формой на кнопке CLOSE вешаю URL "javascript:parent.close();"
19 фев 21, 09:11    [22283254]     Ответить | Цитировать Сообщить модератору
 Re: Перестал работать вызов window.close()  [new]
Sah
Member

Откуда: Moscow
Сообщений: 247
Спасибо. Запомню,может пригодится.
20 фев 21, 09:03    [22283913]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle APEX Ответить