barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

воскресенье, 20 января 2013 г.

IE 9: почему window.open() возвращает null?

Проблема:

Предыстория такая. Есть сайтик на localhost, использующий авторизацию через вк`ашное OpenAPI. Работает авторизация везде, кроме IE. В IE, как и в других браузерах, по нажатию кнопки входа вызывается VK.Auth.login(), открывающая popup, который запрашивает доступ подключенного сайта к информации с ВК:


После того, как юзер нажмет "Разрешить" или "Отмена", или просто закроет popup, должен вызваться callback, переданный в VK.Auth.login() единственным параметром. Во всех браузерах все работет как нужно, а вот IE вызывает callback, не дожидаясь каких-либо действий с popup`ом.
После отладки выяснилось, что причина такого поведения кромется в том, что IE по какой-то причине при вызове window.open() возвращает ull вместо объекта, описывающего открытое окно.

Причина:

Причина крылась в том, что localhost и vk.com расположены в разных зонах: первый - в зоне "Местная интрасеть", второй - "Интернет", и открытие popup`а является в таком случае межзонным. 

Решение:

Вариант 1: отключить защищенный режим для зоны "Интернет", сняв соотв. галочку:


Вариант 2: убрать localhost из зоны "Местная интрасеть" снятием галочки:


Тут правда мы лишаемся некоторых ништяков, например, возможности использовать объект "console" в JS-скриптах.

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

Отправить комментарий