Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle APEX Новый топик    Ответить
 Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
Vlad_567
Member

Откуда:
Сообщений: 105
Как открыть страницу модально используя JavaScript, и что-бы страница не была всплывающим окном (всплывающие окна блокируются браузером)?
19 авг 20, 09:34    [22184296]     Ответить | Цитировать Сообщить модератору
 Re: Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
Vlad_567
Member

Откуда:
Сообщений: 105
JavaScript выполняется на странице - Global Page.
19 авг 20, 09:55    [22184302]     Ответить | Цитировать Сообщить модератору
 Re: Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
blkangel
Member

Откуда:
Сообщений: 1988
https://docs.oracle.com/en/database/oracle/application-express/20.1/aexjs/apex.navigation.html#.fn:dialog
Пойдет?
19 авг 20, 17:12    [22184605]     Ответить | Цитировать Сообщить модератору
 Re: Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
Vlad_567
Member

Откуда:
Сообщений: 105
Апекс 4й версии
20 авг 20, 00:53    [22184728]     Ответить | Цитировать Сообщить модератору
 Re: Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
Vlad_567
Member

Откуда:
Сообщений: 105
Подскажите, не могу разобраться, почему не срабатывает открытие окна в DA (JavaScript), вот варианты:

1. apex.navigation.dialog("f?p=25:60:&APP_SESSION.:");

2. apex.navigation.dialog("f?p=25:60:&APP_SESSION.:::::",{title:'Orders',
height:'480',
width:'800',
modal:true,
resizable:true},
'a-Dialog--uiDialog',
"#P0_BUTTON");

и как-то должно работать без ссылки на кнопку, кнопок нет, вызов идёт по таймеру
20 авг 20, 03:23    [22184739]     Ответить | Цитировать Сообщить модератору
 Re: Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
Vlad_567
Member

Откуда:
Сообщений: 105
Самое главное здесь, что открытие модального окна происходит не по кнопке, а по таймеру (DA). Нужно что-бы браузер не считал его всплывающим окном, т.к. в браузере могут быть заблокированы всплывающие окна.
20 авг 20, 04:32    [22184741]     Ответить | Цитировать Сообщить модератору
 Re: Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
Vlad_567
Member

Откуда:
Сообщений: 105
Может есть у кого идеи как сделать такое: в приложении на апексе много страниц, и нужно, не зависимо от того какая страница открыта, показать пользователю уведомление от другого пользователя, и что-бы на странице уведомления пользователь написал ответ на сообщение. Страницу которая в момент появления уведомления открыта, трогать нельзя, т.к. пользователь вводит какие-то данные. Страница должна быть модальной, что-бы пользователь был вынужден ответить.

Я предполагал сделать так:
Есть страница GlobalPage, на ней сделал таймер. Таймер раз в 2 минуты срабатывает (он в DA). При срабатывании, выполняется PL/SQL код, который проверяет наличие новых уведомлений. Если есть - JavaScript из этого-же DA открывает страницу с уведомлениями в апексе. Там на странице пишет свой ответ, жмёт кнопку и окно закрывается. Ответ улетает пользователю, от когорого пришло уведомление, и по такому-же принципу первый пользователь видит ответ на своё уведомление.

Но на практике получилось так, что всплывающее окно может быть заблокировано браузером, он считает что это всплывающее окно, например с рекламой, и тогда уведомления не работают.

Настраивать компы у всех пользователей - это не дело, есть десятки компов, за которыми работает только один пользователь, есть десятки компов, за которыми работают по несколько пользователей. У всех разные браузеры, в любой момент могут систему переустановить, что-то перенастроить.
20 авг 20, 06:54    [22184755]     Ответить | Цитировать Сообщить модератору
 Re: Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
blkangel
Member

Откуда:
Сообщений: 1988
В 4-й версии не было стандартного механизма модальных окон, я использовал плагин.
Не помню как называется.
20 авг 20, 10:23    [22184820]     Ответить | Цитировать Сообщить модератору
 Re: Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
Vlad_567
Member

Откуда:
Сообщений: 105
blkangel
В 4-й версии не было стандартного механизма модальных окон, я использовал плагин.
Не помню как называется.


а с этим плагином окно открывали, без клика пользователя по ссылке или кнопке или как обычно, когда пользователь кликал по какой-то кнопке?
с кликом по кнопке или по ссылке проблем нет, вопрос именно в открытии без действий пользователя

Сообщение было отредактировано: 21 авг 20, 02:36
21 авг 20, 02:37    [22185195]     Ответить | Цитировать Сообщить модератору
 Re: Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
Javl
Member

Откуда:
Сообщений: 244
Vlad_567,

Лучше напишите на что должно срабатывать открытие и что делает Javascript
21 авг 20, 09:01    [22185264]     Ответить | Цитировать Сообщить модератору
 Re: Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
Vlad_567
Member

Откуда:
Сообщений: 105
Javl
Vlad_567,

Лучше напишите на что должно срабатывать открытие и что делает Javascript


На Global Page есть таймер (срабатывает в DA), который раз в 3 минуты проверяет появились новые события/сообщения для пользователя или нет. Если они есть, то javaScript открывает новую страницу с уведомлениями, страницу открывает модально, что-бы пользователь увидел сообщение, а не проигнорировал его и не закрылась страница, с которой до этого момента работал пользователь. При открытии модальной страницы, создастся событие, что сообщение прочитано, и другой пользователь (которому важно знать, что его сообщение прочитано) узнает, что сообщение получено. Это как-бы замена телефона, пользователи не должны звонить друг другу, а должны отметить всё в программе.
24 авг 20, 01:44    [22186098]     Ответить | Цитировать Сообщить модератору
 Re: Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
=nomad=
Member

Откуда:
Сообщений: 226
Может вам лучше посмотреть в сторону формирования push-сообщений? Ну и помним, что msg сообщения в APEX можно формировать с опцией, чтобы они висели, пока клиент не удалит их сам.
24 авг 20, 09:46    [22186157]     Ответить | Цитировать Сообщить модератору
 Re: Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
Javl
Member

Откуда:
Сообщений: 244
Vlad_567,

Лично я для начала попробовал бы создать к примеру кнопку и проверить работает сам код Javascript по клику, а потом уже дальше разбираться.
24 авг 20, 09:46    [22186158]     Ответить | Цитировать Сообщить модератору
 Re: Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
Vlad_567
Member

Откуда:
Сообщений: 105
Javl
Vlad_567,

Лично я для начала попробовал бы создать к примеру кнопку и проверить работает сам код Javascript по клику, а потом уже дальше разбираться.


Использую браузер Firefox.
По кнопке модальное окно открывается кодом:
window.showModalDialog(url, '', 'dialogHeight:800px;dialogWidth:1200px; help=no; status=no; toolbar=no; directories=no; menubar=no; scrollbars=no; resizable=no; location=no; center=yes');
открывается как и хотелось бы.

По таймеру, при программном нажатии на кнопку, пользователю выдаётся окно: "Не давать этой странице создавать дополнительные диалоговые окна" и две кнопки: Ок и Отмена. Нажимаешь на одну - ничего не происходит, нажимаешь на другую - ниже адреса появляется строка: Firefox заблокировал всплывающее окно с данного сайта, после чего открыть окно можно кликнув по этой строке и выбрав адрес ссылки.
В настройках апексу (адресу) разрешено показывать всплывающие окна.
25 авг 20, 03:05    [22186660]     Ответить | Цитировать Сообщить модератору
 Re: Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
Vlad_567
Member

Откуда:
Сообщений: 105
Начал смотреть в сторону iframe.
При срабатывании таймера, открывается страница с фреймом, в которую загружается страница с уведомлениями. Но очередная незадача: для того, что-бы узнать что страница открыта и не открывать её еще раз, на странице с уведомлением есть таймер, который периодически обновляет скрытый итем, пишет в него текущее время. Таймер по проверке уведомлений, если видит что текущее время мало отличается от времени в скрытом итеме, считает, что страница с уведомлениями открыта и её не нужно открывать еще раз.
Но при закрытии окна с уведомлением (страница с фреймом), оказалось что страница скрыта, а не закрыта и таймер всё время продолжает отрабатывать, при скрытой странице с фреймом.

Как можно проверить, что страница с фреймом не отображается?
Как можно нажав на крестик (справа с верху, для закрытия окна) закрыть окно, а не скрыть его?
26 авг 20, 08:39    [22187215]     Ответить | Цитировать Сообщить модератору
 Re: Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
Vlad_567
Member

Откуда:
Сообщений: 105
окно с фреймом открываю вот так:

var modalDialog=null;

function modalOpen(pageNumber,windowTitle,windowWidth,windowHeight){
var newURL = window.location.protocol + "//" + window.location.host + "/pls/apex/f?p=" +$v('pFlowId')+":"+pageNumber+":"+$v('pInstance')+":::::";

modalDialog=apex.jQuery('<div></div>').html('<iframe src="' + newURL + '" height="'+(windowHeight-50)+'" width="'+(windowWidth-50)+'" style="border:0" frameborder="0" scrolling="yes" marginheight="0" marginwidth="0">').dialog({autoOpen: false,modal: true,height: windowHeight,width: windowWidth,title: windowTitle});
modalDialog.dialog('open');
}
26 авг 20, 08:53    [22187221]     Ответить | Цитировать Сообщить модератору
 Re: Открыть модально страницу JavaScript-ом, не всплывающим окном  [new]
Vlad_567
Member

Откуда:
Сообщений: 105
Переспрошу еще раз:

1. Как можно проверить, что страница с фреймом не отображается из самого окна с фреймом?
2. Как можно проверить, что страница с фреймом не отображается из родительского окна (с которого фрейм был открыт)?
3. Как можно, нажав на крестик в окне с фреймом (справа с верху, для закрытия окна) закрыть окно, а не скрыть его?
26 авг 20, 09:28    [22187230]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle APEX Ответить