всплывающее окно javascript firefox

#javascript

#javascript

Вопрос:

Я хотел бы открыть новую вкладку (или окно, в зависимости от настроек браузера пользователя) с помощью javascript, когда пользователь нажимает на ссылку. Я видел другие сайты, которые делают это, не будучи помеченными firefox как всплывающие окна. Однако моя ссылка помечена как всплывающее окно. Может быть, это потому, что необходимо, чтобы домен оставался неизменным (что не в моем случае)? Есть ли способ предотвратить пометку моей ссылки как всплывающего окна, поскольку событие новой вкладки запускается щелчком мыши?

Спасибо

Комментарии:

1. Можете ли вы указать разметку / код для вашей ссылки?

2. Ну, это window.open(url), где url имеет другое доменное имя, отличное от того, в котором пользователь находится в данный момент.

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

4. вы правы, это имеет смысл :). Мне интересно, есть ли более элегантное решение? С другой стороны, я не уверен, что это проблема домена, я просто констатировал факты. На самом деле я бы предпочел предоставить пользователю возможность либо открыть его на новой вкладке (или в окне), либо остаться на той же вкладке. Firefox позволяет этот выбор, с помощью среднего щелчка, чтобы открыть новую вкладку. К сожалению, средний щелчок не работает для меня, потому что html-тег a <a href=»javascript:void(0)» onclick=»f()»/> , а средний щелчок просто открывает новую вкладку, URL которой — javascript:void(0) . Есть какой-нибудь способ обойти это?

5. Как насчет того, чтобы не использовать всплывающее окно в вашем дизайне? Они заблокированы по причине: пользователям они не нравятся.

Ответ №1:

Вы можете использовать атрибут «target» самой ссылки:

 <a target=_blank href='whatever'>Click Me!</a>
  

чтобы открыть ссылку в новом окне / вкладке.

Комментарии:

1. Будет ли это всегда переопределять блокировщик всплывающих окон (по крайней мере, в разумных пределах)?

2. Ну, кто знает, что люди встроили в свои браузеры (через дополнения или что-то еще), но, как правило, явное действие пользователя, такое как щелчок мышью по ссылке, позволит странице сделать что-то подобное.

3. Достаточно верно; Я полагаю, я недостаточно знаю о том, как работают блокировщики всплывающих окон, чтобы комментировать. Просто на некоторых сайтах, похоже, это отключено (независимо от настроек …). :s

4. Я также нахожусь на своем пределе голосов (осталось 4 минуты), иначе я бы проголосовал. Я собирался добавить это в качестве комментария, поскольку не был уверен, «правильно» это или нет.

5. Я думаю, что это «_blank» с кавычками. Но, похоже, у меня это не работает, оно остается на странице, ничего не происходит. В конечном счете, это, однако, не то, что я хочу. Я бы предпочел предоставить пользователю (мне) возможность либо открыть ссылку на новой вкладке (окне), либо остаться на текущей странице. Средний щелчок делает это для простых ссылок. Но это имеет вид <a href=»javascript:void(0)» onclick=»f()»/> , и если я щелкаю по нему средним щелчком, открывается вкладка, URL-адрес которой — javascript:void(0) . Есть какой-нибудь способ обойти это?

Ответ №2:

Что я, вероятно, сделал бы — в зависимости от точных требований — вместо установки onclick обработчика, установите onmouseup обработчик, и вместо того, чтобы обработчик открывал ссылку, пусть обработчик устанавливает ссылку href — и не переопределяет поведение браузера по умолчанию. (Эта последняя часть на самом деле не важна с точки зрения поведения, поскольку нет основного поведения при наведении курсора мыши по умолчанию, но она важна для удобства чтения!) Затем, после завершения работы обработчика, браузер будет действовать так же, как если бы пользователь нажал на обычную ссылку с этим href : предполагая типичные настройки Firefox, щелчок левой кнопкой мыши откроет ссылку на той же вкладке, средний щелчок откроет ее на новой вкладке, а щелчок правой кнопкой мышиоткроется контекстное меню с такими опциями, как «Открыть ссылку в новом окне» и «Открыть ссылку в новой вкладке».

Комментарии:

1. Да, похоже, это именно то, что я хочу. Спасибо за идею. Я собираюсь попробовать это сейчас и сообщить здесь, если у меня возникнут какие-либо проблемы.

2. Ошибка … после некоторых размышлений я нахожу кое-что неясным в вашей идее: если предполагается, что onmouseup инициализирует href, не будет ли это означать, что мне нужно дважды нажать на ссылку, чтобы фактически открыть ее?

3. Нет, потому onmouseup что обработчик вызывается до выполнения обычной логики обработки ссылок. К тому времени, когда Firefox скажет: «О, эй, он просто нажал на ссылку, я должен открыть ее на новой вкладке», href она уже будет изменена. (Я проверил это перед публикацией, создав локальную HTML-страницу, состоящую всего <a href="#" onmouseup="this.href='http://example.com/'">bar</a> из . Если вы хотите посмотреть, как это работает, без необходимости сначала проводить массовый рефакторинг вашего кода, вы можете попробовать тот же тест.)

Ответ №3:

Действительно простое решение, если вы собираетесь его использовать, — разрешить всплывающие окна на этом сайте. Вы можете настроить firefox следующим образом: http://malektips.com/firefox_0003.html

Комментарии:

1. Я буду единственным, кто действительно использует мое решение, но сайт, на котором я хочу применить свое решение, не мой, и поэтому я бы не хотел, чтобы этот сайт приносил мне всплывающие окна :). Но в любом случае popup, вероятно, был неудачным выбором слов. На самом деле это не то поведение, которое я хочу. Я попытался прояснить свои потребности в других своих комментариях. В принципе, я хочу иметь возможность либо сделать ссылку «всплывающей» (новая вкладка), либо нет, в зависимости от типа клика, который я делаю (левый или средний, щелчок ctrl, …, как с обычными ссылками). Сложность здесь заключается в том, что это функция js, а не обычная ссылка.

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