Функция привязки Jquery в родительском объекте из другого домена
Моя проблема действительно похожа на эту: выполнить функцию javascript в другом iframe, когда parent находится в другом домене
У меня есть страница домена A.com с двумя iframe, содержащими B.com/page1 и B.com/page2
Мне нужно выполнить функцию в iframe B.com/page2, нажав кнопку на B.com/page1 (так же, как уже связанная страница), НО используя jQuery.
Сейчас я использую этот код на B.com/page1
parent.$(parent.document).trigger("myFunction", [myParams]);
и получить его на B.com/page2 с
parent.$(parent.frames).bind("myFunction", function (e, value) { localFunction(value); });
это хорошо работает, если я загружаю и page1, и page2 с B.com/index, но происходит сбой при загрузке с A.com с ошибкой
Небезопасная попытка JavaScript получить доступ к фрейму с URL A.com из фрейма с URL B.com/page2. Домены, протоколы и порты должны совпадать.
ошибка вызывается функцией привязки. Как уже говорилось в связанной теме, я могу ссылаться из iframe на другие iframe на той же странице, используя код:
parent.frames['page2'].myFunction(args);
но я все еще получаю ту же ошибку из консоли JavaScript и еще одну ошибку:
Uncaught TypeError: Невозможно вызвать метод myFunction из неопределенного
Как я могу выбраться из этого? Спасибо!
1 ответ
Решено с помощью функции window.postMessage, как подсказывает Хенрик! Сначала мне нужно было отправить B.com/page2 postMessage на A.com, а затем A.com postMessage на B.com/page1:D он работает в последних chrome, opera, firefox, т.е. 10, ie9, ie8, ie7 без проблем:)
B.com/page2 отправляет сообщение с:
parent.postMessage("go!!!!!", $('#parentPage').val());
(у меня была родительская страница, чтобы написать свой ip в скрытом div, называемом "parentPage"), затем родительская страница получает событие с
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent, function (e) {
//triggered code here
}, false);
и повторно отправить сообщение с этим
win.postMessage(
"go",
targetPage);
B.com/page1 получает сообщение с:
window.onmessage = function (e) { /* code here */ }
надеюсь, что это может быть полезно:)