Call parent Javascript function from inside an iframe

后端 未结 3 674
眼角桃花
眼角桃花 2020-12-13 00:37

I have a iframe (in my domain), that iframe has a file iframe.js.

My parent document has a file parent.js.

I need to call a functio

相关标签:
3条回答
  • 2020-12-13 00:54

    Window.postMessage() method safely enables cross-origin communication.

    If you have access to parent page then any data can be passed as well as any parent method can be called directly from Iframe.

    Parent page:

    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 code:

    window.parent.postMessage({
        'func': 'parentFuncName',
        'message': 'Message text from iframe.'
    }, "*");
    

    References:

    • Cross-document messaging (https://html.spec.whatwg.org/multipage/comms.html#web-messaging)
    • Window.postMessage method (https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage)
    • Can I Use (http://caniuse.com/#search=postMessage)
    0 讨论(0)
  • 2020-12-13 00:58

    I know this is an old question, but in case the accepted answer doesn't work (it didn't work for me) you could do this inside parent.js

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

    Now from the iframe you can call myfunction() like you initially wanted

    window.parent.myfunction(); 
    
    0 讨论(0)
  • 2020-12-13 01:09

    Try just parent.myfunction(). Also be 100% sure that the parent.js is included in your parent document.

    0 讨论(0)
提交回复
热议问题