Подтвердить что ты не робот

Вызовите родительскую функцию Javascript изнутри iframe

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

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

Мне нужно вызвать функцию, которая находится в parent.js, из функции, находящейся в iframe.js.

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

window.parent.myfunction(); 

Ответ 3

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

Литература: