window.opener не правильно - PullRequest
       0

window.opener не правильно

2 голосов
/ 28 апреля 2011

Я открываю всплывающее окно и хочу, чтобы действие щелчка вызывало выполнение некоторого jQuery на открывшей его странице.Все, что я нахожу в Интернете, говорит, что я должен быть в состоянии сделать это с помощью window.opener (например, JQuery - запись в окно открывания )

Но когда я console.log window.opener, это просто«правда», а не реальный объект.window.opener.jQuery не определено как window.opener.$ и 'window.opener.document'.

Вот код открытия окна:

window.open('http://google.com' , "moderatorWindow", 'width=300, height=300');

Это в Safari.Другие страницы могут запускать всплывающие окна, и когда я проверяю window.opener на них, я получаю реальный объект.Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 28 апреля 2011

Ваша переменная - true, а не объект из-за правил политики того же домена. Как и в случае с iframe, если открываемое всплывающее окно находится не в том же домене или поддомене, оно будет потеряно для вас после его создания. Если бы я мог сказать, в Интернете было бы очень небезопасно, откройте (скрытый) iframe на моем сайте gmail.com и сможете прочитать вашу электронную почту.

Даже если всплывающее окно находится на поддомене, вам нужно проделать дополнительную работу и установить значение document.domain обоих окон в корневой домен (например, mydomain.com). Это делается для того, чтобы всплывающий сайт хотел быть известным его родителю (опять же, подумайте о безопасности, если бы мое сообщество coke.ning.com могло открыть скрытый iframe для вашего pepsi.ning.com и предпринять попытки грубой силы на логин и т. д.)

Чтобы доказать мою точку зрения, попробуйте перейти на google.com и открыть Firebug (или Inspector, если вы используете Safari или Chrome) и выполните:

var bob = window.open('http://google.com' , "moderatorWindow", 'width=300, height=300');
bob.window.location.href; // returns "http://www.google.com/"

Наконец, не стесняйтесь вызывать jQuery на дочерней странице, чтобы изменить элементы на той же странице и наоборот, но вы не можете использовать jQuery с одной страницы, чтобы изменить dom другой страницы. Я попытался сделать это несколько лет назад, чтобы сэкономить время загрузки, и, если что-то не изменилось, это не работает. Кажется, jQuery привязан к объекту окна, в котором он был создан. Странные вещи случаются.

0 голосов
/ 28 апреля 2011

Предположительно, вы звоните:

console.log(window.opener);

, который должен вызывать метод toString() из любых window.opener ссылок.Он должен ссылаться на объект окна, который является хост-объектом.В соответствии с ECMA-262, метод toString() хост-объекта (если он есть) может возвращать любую понравившуюся ему вещь, даже выдавать ошибку (попробуйте на некоторых хост-объектах IE, реализованных с использованием ActiveX).может помочь: http://developer.apple.com/library/safari/#documentation/AppleApplications/Conceptual/SafariJSProgTopics/Articles/Cross-documentmessaging.html

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