Вызовите родительскую функцию Javascript изнутри iframe - PullRequest
32 голосов
/ 03 августа 2011

У меня есть iframe (в моем домене), у этого iframe есть файл iframe.js.

В моем родительском документе есть файл parent.js.

Мне нужно вызвать функцию из parent.js из функции из iframe.js.

Я пытался выполнить window.parent.myfunction(), эта функция находится в файле parent.js.

Но это не сработало. Только когда я поместил функцию на родительскую страницу (я имею в виду в HTML), тогда это сработало.

Есть идеи, как заставить это работать?

Ответы [ 3 ]

61 голосов
/ 03 августа 2011

Попробуйте просто parent.myfunction(). Также будьте на 100% уверены, что parent.js включен в ваш родительский документ.

28 голосов
/ 22 января 2014

Я знаю, что это старый вопрос, но в случае, если принятый ответ не работает (он не работает для меня), вы можете сделать это в parent.js

window.myfunction = function () {
   alert("I was called from a child iframe");
}

Теперь изiframe вы можете вызвать myfunction () , как вы изначально хотели

window.parent.myfunction(); 
9 голосов
/ 10 января 2017

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.'
}, "*");

Ссылки:

...