Функция привязки 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 */ }

надеюсь, что это может быть полезно:)

Другие вопросы по тегам