Window open блокирует браузер

Обновлено: 07.07.2024

Репутация: нет
Всего: нет

Открываю окно методом: window.open(. ), но ИЕ и остальные попап-блокеры его блокируют.
Я слышал и знаю, что на JS это можно обойти! Не подскажите как? а еще лучше дайте ссылочку.. искал на этом форуме но похожей темы не нашел, но вроде когда-то видел.

Репутация: нет
Всего: нет

Репутация: 20
Всего: 39

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

Добавлено @ 21:34
или в якоря a href=javascript:window.open()

Репутация: 13
Всего: 36

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

Репутация: нет
Всего: нет

vasac,
но ее можно обойти.

dstorm81,
у меня там так:

что надо изменить?

Репутация: 20
Всего: 39

а window.close() будет задавать вопрос если окно родительское
это случаем не реклама?, тогда лучше ее в тело страницы пихай

Репутация: нет
Всего: нет

наверно мне стоило обьяснить суть: есть игра, вход со стартовой, если поставить галочку - то игра должна открыться в новом окне без всяких меню, тулбаров и т.д. Соответственно состояние галочки определяется в скрипте логин.пхп, и бровзер тоже определяется там, поэтому приходится действовать вот так echo "my_win(); window.close();"; и т.д (см. выше).

Добавлено @ 13:05
поэтому через якоря не очень получается т.к мне нужен редирект, а там срабатывает на клик. Данные отправляются методом ПОСТ.

Репутация: 20
Всего: 39

Репутация: нет
Всего: нет

если чесно не очень понял.

Цитата

причем при щелчке все данные передаются в новое окно без тулбаров, и вызывается функция субмит,

передаются каким методом?

Судя из всего можно сделать что на стортовой через якорь открывается окно логина, но тогда данные будут передаваться методом ГЕТ, путем формирования линка JS ф-цией..типа:

но я думаю это не есть хорошо

dstorm81,
обьясни пожалуйста свой способ чуть поподробней.

Репутация: 20
Всего: 39

ну есть же такие функции яваскрипт к примеру как создание нового окна

то есть передашь форму и отправишь ее, вот так в принципе делается
P.S. за синтаксис не уверен

Репутация: 20
Всего: 39

Репутация: нет
Всего: нет

наверно ты имел ввиду следующее:
1) на стартовой жмется линк с якорем
2) выскакивает окно без тулбаров и т.д
3) в это окно пишется форма со всеми делами
4) данные в эту форму берутся со стартовой страницы через ИД
5) после того как форма сгенерина - делается автоматический Сабмит
6) ну запускается логин.пхп уже в этом окне поэтому там по старинке прокатывает редирект в случае успешного логина.

Добавлено @ 09:40
dstorm81,
да я примерно так и думал.. только не понятно зачем:

dstorm81,
вообщем на днях попробую и сообщу результат.

Репутация: 20
Всего: 39

Ага, у нас совпадение мыслей, или мыслев?

myWin.document.close() по идее это завершение записи поток

Репутация: нет
Всего: нет

эээ.. а как он жмется если там субмит на энтер срабатывает?? Можно ли как-нить симулировать клик на ссылку?

Репутация: 78
Всего: 317

Есть же about:blank для этих целей.

Почти здравая мысль была в этом посте. Очистим её от изврата и получим:

1) родительское окно с формой логина, раз игрушка, по любому логин понадобиться.
2) по onsubmit формы window.open("about:blank", "main_window", features)
3) в аттрибуте target формы прописываем main_window
4) форма отправляеться без участия скриптов, по своей кнопке.

Как должно быть уже ясно, открываем новое окно с именем, в это окно форма с родительского окна и загрузиться. Далее с дочернего можно можно загрузить в родительское что-нибудь. При закрытии родительского браузер по любому спросит разрешения.

Опыт - сын ошибок трудных © А. С. Пушкин
Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
Оценить мои качества можно тут.

Репутация: нет
Всего: 3

Блокировку всплывающих окон можно обойти - "их не использованием" )

плюсы
- они не блокируются
- полностью настраиваемы
- а если нужно сложное содержание - то вставляем IFRAME

Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.

[ Время генерации скрипта: 0.1409 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Общее правило заключается в том, что блокировщики всплывающих окон будут задействованы, если [j1] или подобное вызывается из javascript, который не вызывается прямым действием пользователя. То есть вы можете вызвать window.open в ответ на нажатие кнопки без попадания в блокировщик всплывающих окон, но если вы поместите тот же код в событие таймера, он будет заблокирован. Глубина цепочки вызовов также является фактором - некоторые старые браузеры смотрят только на непосредственного вызывающего абонента, новые браузеры могут немного отступить, чтобы увидеть, был ли вызывающий абонент щелчком мыши и т. Д. Держите его настолько мелким, насколько это возможно, чтобы избежать блокировщиков всплывающих окон.

Кроме того, Swiss Mister post, в моем случае window.open был запущен внутри обещания, который включил блокировку всплывающих окон, мое решение было: в угловом:

так вы можете открыть новую вкладку с помощью ответа на обещание и не вызвать блокировщик всплывающих окон.

Как хорошая практика, я думаю, что это хорошая идея test , если всплывающее окно было заблокировано и принять меры в случае. Вы должны знать, что window.open имеет возвращаемое значение, и это значение может быть пустым, если действие не выполнено. Например, в следующем коде:

, если всплывающее окно заблокировано, window.open вернет значение null. Таким образом, функция вернет false.

В качестве примера предположим, что вы вызываете эту функцию непосредственно из любой ссылки с target="_blank" : если всплывающее окно успешно открыто, то возврат false блокирует действие ссылки , иначе, если всплывающее окно заблокировано, возврат true позволит по умолчанию (открыть новое окно _blank) и продолжить.

Таким образом, у вас будет всплывающее окно, если оно работает, и окно _blank, если нет.

Если всплывающее окно не открывается, вы можете:

  • открыть пустое окно, как в пример и продолжить
  • открыть поддельное всплывающее окно (iframe внутри страницы)
  • сообщить пользователю («разрешить всплывающие окна для этого сайта»)
  • открыть пустое окно, а затем информировать пользователя и т. д.

См. область, где она читается:

В реализации клиента OAuth 2.0 используется всплывающее окно, предлагающее пользователю выполнить вход и одобрить приложение. Первый вызов функции gapi.auth.authorize может вызывать блокировки всплывающих окон, поскольку он косвенно открывает всплывающее окно. Чтобы предотвратить блокирование блокировщика всплывающих окон при вызове auth, вызовите функцию gapi.auth.init (обратный вызов), когда клиент загружается. Приведенный обратный вызов будет выполнен, когда библиотека готова к авторизации вызовов.

Я бы предположил, что это связано с реальным ответом выше, как он объясняет, есть ли немедленный ответ, он не отключит всплывающее предупреждение. «Gapi.auth.init» делает это так, что api происходит немедленно.

Я сделал микросервис с проверкой подлинности с открытым исходным кодом, используя паспорт узла на npm, и различные паспортные пакеты для каждого провайдера. Я использовал стандартный подход переадресации к третьей стороне, давая ему URL-адрес переадресации, чтобы вернуться. Это было программно, поэтому я мог бы иметь разные места для перенаправления обратно, если вход / регистрация и на определенные страницы.

Псевдокод с фрагментами Javascript:

Обогатите вызов window.open с любыми дополнительными параметрами, которые вам нужны.

Я действительно использую это решение для mailto перенаправление, и он работает во всех моих браузерах (Windows 7, Android). Бит _blank помогает перенаправлять mailto для работы на мобильных устройствах.

Я хочу показать диалог JQuery условно на событии click гиперссылки .

у меня есть требование, как в condition1, откройте диалог JQuery, и если condition1 не удовлетворен, перейдите на страницу, на которую ссылается тег 'href', событие click которого находится под вопросом.

Я могу вызвать функцию на событие click по ссылке. Эта функция теперь проверяет указанное условие, выполняя другой URL (который выполняет мой контроллер Spring и возвращает ответ.)

все работает идеально, только с окном.открыть блокируется блокировщиком всплывающих окон.

Если я удалить e.preventDefault(); из кода popoup blocker не блокирует страницу, однако для condition1 он затем открывает диалог, а также открывает страницу "href".

Если я решу один, это создаст проблему для другого. Я не могу отдать справедливость обоим условиям одновременно.

не могли бы вы помочь мне решить эту проблему пожалуйста?

после этого решена у меня есть еще одна проблема для решения, т. е. навигация по событию OK диалога:)

блокировщики всплывающих окон обычно разрешают только window.open если используется во время обработка события пользователя (например, щелчок). В вашем случае вы звоните window.open позже, а не во время мероприятия, потому что $.getJSON - это асинхронный.

у вас есть два варианта:

сделайте что-нибудь другое, а не window.open .

сделайте вызов ajax синхронным, чего обычно следует избегать, как чума, как он блокирует пользовательский интерфейс браузера. $.getJSON эквивалентно:

. и поэтому вы можете сделать свой $.getJSON вызов синхронный, сопоставив ваши параметры выше и добавив async: false :

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

вот пример кода, который не проходит тест из-за асинхронной звоните:

видео | Живой источник (живые ссылки больше не работают из-за изменений в JSBin)

и вот пример, который работает, используя синхронный вызов:

видео | Живой источник (живые ссылки больше не работают из-за изменений в JSBin)

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

Итак, вы можете попробовать этот сценарий:

У меня была эта проблема, и у меня не было моего url-адреса, пока обратный вызов не вернет некоторые данные. Решение состояло в том, чтобы открыть пустое окно перед запуском обратного вызова, а затем просто установить местоположение при возврате обратного вызова.

попробуйте это, это работает для меня,

Windows должна быть создана в одном стеке (aka microtask) как инициированное пользователем событие, например, обратный вызов щелчка--поэтому они не могут быть созданы позже, асинхронно.

вы можете создать окно без URL и вы можете изменить URL этого окна как только вы это узнаете, даже асинхронно!

Методы объекта window: open(), close(), print(), focus() и blur()

В этом разделе мы рассмотрим следующие методы объекта window :

  • open() - предназначен для открытия окон (вкладок);
  • close() - предназначен для закрытия окон. В основном используется для закрытия окон открытых методом open() ;
  • print() - предназначен для печати содержимого окна;
  • focus() - предназначен для передачи фокусу указанному окну;
  • blur() - предназначен для удаления фокуса с указанного окна.

Открытие нового окна или вкладки

В JavaScript открыть новое окно или вкладку из существующего документа можно с помощью метода « window.open ».

Синтаксис метода open объекта window

  • url – адрес ресурса, который необходимо загрузить в это окно или вкладку (если в качестве url указать пустую строку, то туда будет загружена пустая страница «about:blank»);
  • windowName – имя окна;
  • windowFeature – необязательный параметр для настройки свойств окна (они указываются в формате «свойство=значение» через запятую и без пробелов).

Настройки окна windowFeature :

Настройки menubar , toolbar , location , resizable , scrollbars , status является логическими, если их нужно включить, то устанавливаем значение true , в противном случае – false .

Рассмотрим следующий примеры:

1. Открыть пустую страницу about:blank в новом окне. Данное окно должно иметь ширину и высоту, равную 250рх:

2. Открыть веб-страницу "http://itchief.ru/" в текущем окне:

3. Открыть новое окно, имеющее определённые свойства (top=100, left=100, width=400, height=500, scrollbars=yes, resizabie=yes):

Как взаимодействовать с окном после его открытия

Метод open() позволяет не только открыть окно, но и получить ссылку на данное окно. Данная ссылка позволяет взаимодействовать с этим окном посредством вызова определённых свойств и методов. Т.е. мы можем с помощью JavaScript кода, расположенного в одном окне управлять другим окном.

Переменная, содержащая ссылку на окно

Например, для того чтобы обратиться к объекту document открытого окна:

Обращение к объекту document открытого окна

Открыть пустое новое окно и вывести в ней некоторый текст:

Примечание: Взаимодействовать Вы можете только с теми окнами, которые сами открыли, с другими окнами Вы работать не можете.

Метод close()

Он предназначен для закрытия окна. Данный метод не имеет параметров. Он обычно используется для закрытия окон созданных методом open() . В противном случае, когда Вы попытаетесь закрыть окно (вкладку), открытое самим пользователем (не из JavaScript), то браузер из-за соображений безопасности запросит у пользователя подтверждение на выполнение этого действия.

Например, cоздадим кнопки для открытия и закрытия окна с именем myWindow :

Метод print()

Он предназначен для печати содержимого окна. Данный метод не имеет параметров.

Метод focus()

Он предназначен для передачи фокусу указанному окну. Данный метод не имеет параметров.

Метод blur()

Он предназначен, чтобы убрать фокус с указанного окна, т.е. перемещает его на задний план. Данный метод не имеет параметров.

Свойства объекта window: name, opener, closed

В этом разделе рассмотрим следующие свойства объекта window :

  • name — предназначено для получения или установления внутреннего имени окна;
  • opener - позволяет получить в текущем окне, ссылку на окно (объект window ), с которого было открыто данное окно;
  • closed - свойство логического типа, которое возвращает: true , если окно закрыто и false , если окно открыто.

Свойство name

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

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

Данное имя в основном используется в гиперссылках и формах для указания окна, в котором необходимо открыть страницу. Например, для указания внутреннего имя окна в гиперссылке используется атрибут target , Если элемент а имеет атрибут target="searchWindow" , то при нажатии на данную ссылку браузер сначала пытается найти окно с таким внутренним именем ( searchWindow ), если окна с таким внутренним именем не существует, то он открывает новое окно и присваивает ему имя searchWindow . А если окно с таким именем существует, то новое окно не открывается, а перезагружается страница по указанной ссылке а этом окне. По умолчанию окна а браузере не имеют внутреннего имени.

Например, откроем страницу "http://www.google.com/" в окне, имеющем имя myWindow :

Например, откроем окно с помощью метода open() и выведем в нём его имя:

Свойство opener

Данное свойство позволяет получить в окне, ссылку на исходное окно (объект window ), т.е. на окно из которого было открыто данное окно.

Например, у Вас есть исходное окно (1), в котором Вы с помощью метода ореn() открываете другое окно (2). В этом окне (2) Вы можете с помощью свойства opener получить окно (1).

Свойство opener объекта window

Свойство closed

Свойство closed возвращает логическое значение, указывающее закрыто окно или нет.

Читайте также: