Можно ли сфокусироваться на фрейме после того, как триггер для открытия фрейма вызывается во второй раз (Firefox)?

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

У меня есть следующий javascript/jquery, чтобы открыть новое окно, вызванное нажатием кнопки на моей странице:

alipayTransactionModalTrigger.click(function() {
     NIWindow=window.open("<!--ALIPAY_CONF_REDIRECT_URL-->", "NI payment");
     alipayTransactionModal.dialog("open");
  });

В Chrome и Firefox это открывает новый фрейм, и фрейм получает фокус. Это хорошо. Однако, если пользователь оставит этот новый фрейм открытым и вернется на исходную страницу. Они могут нажать кнопку, чтобы снова вызвать это событие. Если это происходит, новый фрейм перезагружается, как и должно быть, но в Firefox новый фрейм НЕ перетаскивает фокус на это обновление. Я не уверен, почему он будет перетаскивать фокус при начальной загрузке нового кадра, но не перетаскивать фокус, если кадр обновляется с тем же триггером события. У меня еще не хватило смелости проверить это в IE...

Это одна из тех вещей, которые вы не можете надежно контролировать? Или есть способ сделать это? Обратите внимание: я пытался использовать NIWindow.focus() после начальной строки кода, открывающей окно выше. Неудачно.

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

Я мог бы просто всегда открывать новое окно «_blank», и это обеспечивало бы фокус, но URL-адрес недавно открытого фрейма использует параметры, основанные на родительском окне. У меня нет доступа к этому коду, поэтому я не могу добавить проверки, чтобы убедиться, что данные совпадают, пока я не получу ответ от этого перенаправления.


person mkohanek    schedule 01.02.2013    source источник


Ответы (1)


Дайте каждому новому окну новое имя. У вас есть причина для повторного использования имени "NI payment"?

Если ваш код зависит от этого имени окна, вам следует рассмотреть возможность передачи ссылки на окно (NIWindow) напрямую вместо имени. Внедрение/передача ваших зависимостей вместо того, чтобы полагаться на волшебный суперглобальный код, в целом является лучшим подходом.

person Halcyon    schedule 01.02.2013
comment
Что ж, переменная в этом заключается в параметрах URL, используемых в window.open. Например, скажем, сначала я отправляю пользователя на www.test.com?test=123, но пользователь возвращается на начальную страницу и что-то меняет, в результате чего новый URL-адрес выглядит следующим образом: www.test.com?test= 246 Если пользователь оставил первое новое окно открытым и решил использовать его вместо второго вновь открытого окна, сайт использует test=123 вместо test=246 Сайт, на который перенаправляется пользователь, относится к типу сайта PayPal. , так что вы можете видеть, как это может быть проблематично. У меня есть логика, чтобы проверить это позже, конечно, на всякий случай - person mkohanek; 01.02.2013
comment
Я думаю, вы должны быть в состоянии переписать свой код, чтобы использовать зависимость от окна. Вы можете перенаправить пользователя NIWindow.location.href = "[next page]" из окна вызова. - person Halcyon; 01.02.2013
comment
Это выполнило то же самое, что и мой код выше - я сначала вызываю window.open, чтобы открыть окно. Затем, если пользователь попытается снова, я использую NIWindow.location.href, но это просто перезагружает окно, не фокусируя его - фокус остается на родительском окне. - person mkohanek; 01.02.2013
comment
Нет, вы делаете это неправильно, вам нужно создавать новое окно каждый раз, когда пользователь «пробует снова». - person Halcyon; 01.02.2013
comment
Может быть, я неправильно понимаю. Вы имеете в виду что-то вроде этого? NIWindow=window.open("<!--ALIPAY_CONF_REDIRECT_URL-->", "NI payment"); NIWindow.location.href = "<!--ALIPAY_CONF_REDIRECT_URL-->"; alipayTransactionModal.dialog("open"); Если да, то я пробовал и так, результат тот же. - извините, я не могу получить форматирование лучше, чем в разделе ответов на комментарии - person mkohanek; 02.02.2013