[Javascript] iframe에서 부모 창 함수 호출


Answers

나는 최근에 이것이 작동하지 않는 이유를 알아 내야 만했다.

자식 iframe에서 호출하려는 javascript는 부모의 머리에 있어야합니다. 본문에있는 경우 전역 범위에서 스크립트를 사용할 수 없습니다.

<head>
    <script>
    function abc() {
        alert("sss");
    }
    </script>
</head>
<body>
    <iframe id="myFrame">
        <a onclick="parent.abc();" href="#">Click Me</a>
    </iframe>
</body>

이것이이 문제에 다시 걸리는 모든 사람들에게 도움이되기를 바랍니다.

Question

iframe에서 부모 창 JavaScript 함수를 호출하려고합니다.

<script>
    function abc()
    {
        alert("sss");
    }
</script>

<iframe id="myFrame">
    <a onclick="abc();" href="#">Call Me</a>
</iframe>



그 (것)들을 필요로하는 사람들을위한 또 다른 추가. 다른 프로토콜을 사용하는 경우 Ash Clarke의 솔루션이 작동하지 않으므로 SSL을 사용하는 경우 iframe에서도 SSL을 사용하고 있거나 기능을 중단해야합니다. 그의 솔루션은 도메인 자체에서 작동 했으므로 그 점에 대해 감사드립니다.




이러한 솔루션 중 일부는 제대로 작동 할 수 있지만 그 중 최상의 방법은 없습니다. 많은 사람들이 전역 변수를 할당하고 여러 부모 변수 나 함수를 호출하는 경우가 많아서 복잡하고 불안정한 네임 스페이스가 생길 수 있습니다.

이를 방지하려면 모듈 패턴을 사용하십시오. 상위 창에서

var myThing = {
    var i = 0;
    myFunction : function () {
        // do something
    }
};

var newThing = Object.create(myThing);

그런 다음 iframe에서 :

function myIframeFunction () {
    parent.myThing.myFunction();
    alert(parent.myThing.i);
};

이는 Crockford의 정식 텍스트 인 "Javascript : The Good Parts"의 Inheritance 장에서 설명한 패턴과 유사합니다. 자바 스크립트의 베스트 프랙티스에 대한 자세한 내용은 w3의 페이지를 참조하십시오. https://www.w3.org/wiki/JavaScript_best_practices#Avoid_globals




나는 기존 대답과는 무관하므로 별도의 답변으로 게시했습니다.

이 문제는 최근에 하위 도메인을 참조하는 iframe에서 상위에 액세스하기 위해 다시 자르며 기존 수정이 작동하지 않았습니다.

이번에는 부모 페이지의 document.domain과 iframe을 동일하게 수정했습니다. 이렇게하면 똑같은 출처 정책 수표 를 속여 같은 도메인에 공존한다고 생각하게됩니다 (하위 도메인은 다른 호스트로 간주되어 동일한 출생지 정책 수표에 실패합니다).

iframe의 페이지의 <head> 에 부모 도메인과 일치하도록 다음을 삽입하십시오 (doctype을 조정하십시오).

<script>
    document.domain = "mydomain.com";
</script>

localhost 개발시 오류가 발생하므로 다음과 같은 검사를 사용하여 오류가 발생하지 않도록하십시오.

if (!window.location.href.match(/localhost/gi)) {
    document.domain = "mydomain.com";
} 



parent.abc () 는 보안상의 이유로 동일한 도메인에서만 작동합니다. 나는이 해결 방법을 시도하고 광산은 완벽하게 작동했습니다.

<head>
    <script>
    function abc() {
        alert("sss");
    }

    // window of the iframe
    var innerWindow = document.getElementById('myFrame').contentWindow;
    innerWindow.abc= abc;

    </script>
</head>
<body>
    <iframe id="myFrame">
        <a onclick="abc();" href="#">Click Me</a>
    </iframe>
</body>

희망이 도움이됩니다. :)




Links