Странное поведение IE7 с JavaScript window.open () - PullRequest
2 голосов
/ 25 января 2009

Известно, что следующий код работал три недели назад. Тем временем мы установили IE 7 и несколько патчей безопасности. Главный вопрос будет, кто-нибудь знает, как восстановить старое поведение?

Сценарий

У нас есть следующий код JavaScript на веб-странице 1 (назовем его foo.aspx), который вызывается нажатием кнопки:

window.open("http://Foo/App2/bar.aspx, "_blank", "titlebar,status,width=650,height=600");

Вторая веб-страница (bar.aspx) должна открываться поверх foo.aspx. Пользователь делает некоторые вещи, и когда они нажимают кнопку bar.aspx записывает некоторые значения из bar.aspx обратно в поля на foo.aspx, используя JavaScript через window.opener.document, обращаясь к каждому элементу индивидуально и изменяя его innerText. Затем пользователь закрывает bar.aspx, и там есть файл foo.aspx, в котором он его оставил, за исключением того, что теперь он содержит значения из bar.aspx в определенных полях, и пользователь счастливо продвигается по пути, используя foo.aspx. Это работает более двух лет.

В течение последних двух недель мы применили несколько исправлений безопасности и обновили до IE 7. Теперь поведение таково:

  1. Если я тестирую и просто перехожу к foo.aspx напрямую, то после нажатия кнопки bar.aspx открывается, а затем внезапно фокус переключается обратно на foo.aspx с всплывающим диалоговым окном с «Веб-страница, которую вы просматриваете пытается закрыть окно. Вы хотите закрыть это окно? »Если я выберу« Нет », то foo.aspx останется в живых, мне нужно Alt-Tab, чтобы вернуться к bar.aspx, и после этого все будет работать как до. Тем не менее, это будет боль для пользователей. Примечание: NOWHERE в foo.aspx, NOR bar.aspx, есть вызов метода close () !!! Поэтому я не понимаю, почему всплывающее окно говорит то, что говорит.

  2. Если я получаю доступ к foo.aspx через приложение, что означает, что он был открыт программно, а не явно пользователем, то открывается bar.aspx, и вы видите, что foo.aspx исчезает (закрывается) за ним. Затем bar.aspx получает ошибки JavaScript, потому что window.opener больше не доступен.

Сценарий № 1 неоптимален, но, по крайней мере, будет правильным решением (если в какой-то степени проблема с обучением пользователя, чтобы научить их нажимать «Нет», а затем Alt-Tab, где раньше ничего этого не происходило). Сценарий # 2 крайне неоптимален, учитывая, что вся цель bar.aspx - записать эти значения обратно в foo.aspx.

Другие примечания

  1. Теперь, когда мы установили IE 7 и последующие изменения политики Active Directory, поведение происходит, как описано даже в IE 6.

  2. И foo.aspx, и bar.aspx работают на веб-сервере, на одном веб-сайте, но в разных виртуальных каталогах. Это внутренние приложения, доступные только изнутри нашей сети аутентифицированным пользователям.

  3. Наличие сервера в зоне интрасети (где он обычно находится) или на доверенных сайтах не имеет значения. Я не вижу ни параметров ни в Зоне, ни в Расширенных настройках, которые могли бы применяться к этому поведению, а зоны Интранет и Надежные сайты настроены крайне либерально в своих политиках, особенно в отношении поведения сценариев.

  4. Я могу внести любые необходимые изменения в bar.aspx и его клиентские скрипты, но ограничен возможностью изменять только JavaScript-код нажатия кнопки в foo.aspx (эта страница предоставляется vendor, тогда как bar.aspx является внутренне разработанным).

  5. Я повторяю, что кроме обновлений через window.opener.document, foo.aspx не затрагивается bar.aspx, и, конечно, нет попытки вызвать close () для него.

Итак, остается вопрос: что в IE 7 или, скорее всего, в патче безопасности, сломало бы это? У нас есть дочерний магазин, который использует тот же код на IE 7, и они не сообщили об этой проблеме. Так что кажется, что это должно быть что-то экологическое, и сейчас я продолжаю думать, что это должно быть патч, который был применен. Я бы взял статью КБ, настройки IE, взлом реестра, изменение JavaScript или что-нибудь еще, чтобы это исправить.

Спасибо за любые предложения.

Ответы [ 4 ]

1 голос
/ 01 февраля 2009

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

1 голос
/ 25 января 2009

это может быть опечатка, но в файле кода отсутствует "bar.aspx".

0 голосов
/ 26 января 2009

Блокировка всплывающих окон закрывает всплывающее окно?

0 голосов
/ 25 января 2009

Странно, первое, что я хотел бы сделать - это исправить пару странных вещей в коде.

Используйте абсолютный путь, например "/App2/bar.aspx" без протокола или имени сервера, поскольку приложения находятся на одном сервере.

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

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