Ответ 1
Попробуйте просто parent.myfunction()
. Также убедитесь, что parent.js включен в ваш родительский документ на 100%.
У меня есть iframe (в моем домене), что iframe имеет файл iframe.js
.
У моего родительского документа есть файл parent.js
.
Мне нужно вызвать функцию, которая находится в parent.js
, из функции, находящейся в iframe.js
.
Я попытался сделать window.parent.myfunction()
, эта функция находится в файле parent.js
.
Но это не сработало. Только когда я помещаю функцию на родительскую страницу (я имею в виду в HTML), тогда она сработала.
Любая идея, как заставить это работать?
Попробуйте просто parent.myfunction()
. Также убедитесь, что parent.js включен в ваш родительский документ на 100%.
Я знаю, что это старый вопрос, но если принятый ответ не работает (для меня это не сработало), вы можете сделать это внутри parent.js
window.myfunction = function () {
alert("I was called from a child iframe");
}
Теперь из iframe вы можете вызвать myfunction(), как вы изначально хотели
window.parent.myfunction();
Window.postMessage()
безопасно обеспечивает связь cross-origin
.
Если у вас есть доступ к родительской странице, тогда любые данные могут быть переданы, а любой родительский метод может быть вызван непосредственно из Iframe
.
Родительская страница:
if (window.addEventListener) {
window.addEventListener("message", onMessage, false);
} else if (window.attachEvent) {
window.attachEvent("onmessage", onMessage, false);
}
function onMessage(event) {
// Check sender origin to be trusted
if (event.origin !== "http://example.com") return;
var data = event.data;
if (typeof(window[data.func]) == "function") {
window[data.func].call(null, data.message);
}
}
// Function to be called from iframe
function parentFuncName(message) {
alert(message);
}
Код iframe:
window.parent.postMessage({
'func': 'parentFuncName',
'message': 'Message text from iframe.'
}, "*");
Литература: