Известно, что следующий код работал три недели назад. Тем временем мы установили 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. Теперь поведение таково:
Если я тестирую и просто перехожу к foo.aspx напрямую, то после нажатия кнопки bar.aspx открывается, а затем внезапно фокус переключается обратно на foo.aspx с всплывающим диалоговым окном с «Веб-страница, которую вы просматриваете пытается закрыть окно. Вы хотите закрыть это окно? »Если я выберу« Нет », то foo.aspx останется в живых, мне нужно Alt-Tab, чтобы вернуться к bar.aspx, и после этого все будет работать как до. Тем не менее, это будет боль для пользователей. Примечание: NOWHERE в foo.aspx, NOR bar.aspx, есть вызов метода close () !!! Поэтому я не понимаю, почему всплывающее окно говорит то, что говорит.
Если я получаю доступ к foo.aspx через приложение, что означает, что он был открыт программно, а не явно пользователем, то открывается bar.aspx, и вы видите, что foo.aspx исчезает (закрывается) за ним. Затем bar.aspx получает ошибки JavaScript, потому что window.opener больше не доступен.
Сценарий № 1 неоптимален, но, по крайней мере, будет правильным решением (если в какой-то степени проблема с обучением пользователя, чтобы научить их нажимать «Нет», а затем Alt-Tab, где раньше ничего этого не происходило). Сценарий # 2 крайне неоптимален, учитывая, что вся цель bar.aspx - записать эти значения обратно в foo.aspx.
Другие примечания
Теперь, когда мы установили IE 7 и последующие изменения политики Active Directory, поведение происходит, как описано даже в IE 6.
И foo.aspx, и bar.aspx работают на веб-сервере, на одном веб-сайте, но в разных виртуальных каталогах. Это внутренние приложения, доступные только изнутри нашей сети аутентифицированным пользователям.
Наличие сервера в зоне интрасети (где он обычно находится) или на доверенных сайтах не имеет значения. Я не вижу ни параметров ни в Зоне, ни в Расширенных настройках, которые могли бы применяться к этому поведению, а зоны Интранет и Надежные сайты настроены крайне либерально в своих политиках, особенно в отношении поведения сценариев.
Я могу внести любые необходимые изменения в bar.aspx и его клиентские скрипты, но ограничен возможностью изменять только JavaScript-код нажатия кнопки в foo.aspx (эта страница предоставляется vendor, тогда как bar.aspx является внутренне разработанным).
Я повторяю, что кроме обновлений через window.opener.document, foo.aspx не затрагивается bar.aspx, и, конечно, нет попытки вызвать close () для него.
Итак, остается вопрос: что в IE 7 или, скорее всего, в патче безопасности, сломало бы это? У нас есть дочерний магазин, который использует тот же код на IE 7, и они не сообщили об этой проблеме. Так что кажется, что это должно быть что-то экологическое, и сейчас я продолжаю думать, что это должно быть патч, который был применен. Я бы взял статью КБ, настройки IE, взлом реестра, изменение JavaScript или что-нибудь еще, чтобы это исправить.
Спасибо за любые предложения.