javascript window.location не работает в Firefox

у меня реально голова болит:

используя javascript (скажем, на page1.html), я использую код, подобный приведенному ниже, для запуска нового окна:

var popwindow = window.open("http://www.stackoverflow.com");

Затем я передаю переменную popwindow функции, которая использует setTimeout для повторения каждые 3 или 4 секунды (эта часть не слишком важна, я не думаю). то, что делает этот небольшой зацикленный код, (предполагается) проверяет объект location всплывающего окна, чтобы увидеть, когда URL-адрес изменяется и содержит некоторую переменную строки запроса.

по большей части это работает; код повторяется, и с помощью firebug я вижу, что объект окна передается так, как должен.

моя проблема заключается в том, что всякий раз, когда я пытаюсь получить доступ к popwindow.location.href или popwindow.location.search, происходит сбой javascript. Я даже просто пытался сделать popwindow.location.toString(), чтобы вытащить этот материал самостоятельно, но это тоже вылетает.

когда я использую firebug, я вижу, что объект location, к которому я пытаюсь получить доступ, является законным экземпляром location; firebug позволяет мне просматривать поля объекта location, когда скрипты приостановлены. однако, когда я пытаюсь получить доступ к этим вещам (я не пишу им, только читаю значения), это никогда не сработает... в случае, если это полезно, я использую последнюю версию firefox (5.0 я думаю).


person jzimmerman2011    schedule 27.07.2011    source источник


Ответы (2)


Если указанное окно не находится в том же домене, что и окно, в котором находится скрипт, в котором вы работаете, браузер не позволит вам получить доступ к междоменным окнам. Это вызовет исключение.

person jfriend00    schedule 27.07.2011
comment
это имеет смысл, почему он не работает, потому что логически мой код имеет смысл. было бы это также верно, если бы я использовал iframe вместо запуска другого окна? - person jzimmerman2011; 27.07.2011
comment
фреймы, окна и фреймы подчиняются одной и той же политике происхождения. Таким образом, создание iframe не поможет. - person jfriend00; 28.07.2011
comment
крысы, думаю, тогда мне придется полностью переосмыслить эту часть моего проекта. я знал, что такие вещи, как запросы AJAX, были ограничены таким доступом к тому же домену, но я подумал, что если вы запустите новое окно в javascript, вы получите полный контроль над ним... о, ну, спасибо! - person jzimmerman2011; 28.07.2011

Из https://developer.mozilla.org/En/DOM/Window.open

окноОбъектСсылка

Это ссылка, указывающая на только что созданное окно браузера. Эта ссылка является возвращаемым значением метода open(); оно будет нулевым, если по каким-то причинам при выполнении не удалось открыть окно. Для хранения такой ссылки лучше всего использовать глобальную переменную. Затем вы можете, например, использовать его для поиска свойств нового окна или доступа к его методам, предполагая, что ваши отношения между основным и дополнительным окном соответствуют Та же политика происхождения требования безопасности.

Я подозреваю, что это, вероятно, ваша проблема. Ссылка «Политика того же происхождения» документирует требования более подробно.

person Ilmari Karonen    schedule 27.07.2011