Проблема: Javascript iframe отправляет postMessage () до завершения загрузки iframe - PullRequest
0 голосов
/ 15 января 2020

У меня есть iframe в родительском. html. Child. html отправка postMessage ('documnent.cook ie', '*') в родительское окно.

Проблема в том, что postMessage () отправляет 'null'. postMessage () запускается до полной загрузки iframe. Я должен postMessage () в родительское окно, только если iframe полностью загружает данные.

Вот мой код: parent. html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">

<body id="Body" style="background-color:Silver">

  <iframe id ="CA_FRAME_0" src="http://localhost/ibmcognos/bi/child.html" style="display:none"></iframe>

  <script type="text/javascript">  

    window.addEventListener("message", function (e){   


    if(e.data == null){         
        alert('fail');                

    }else{      
        alert('sucess');           
        document.cookie="key=" +e.data + ";expires=0;path=/";           
    }       

    }, false);  


</script>

<div id="arcContainer" class="arcContainer"></div>  

    <script type="text/javascript">     

        ARCPLAN.language = "XXX";
        ARCPLAN.application = "lv02";
        ARCPLAN.startDocName = "application.apa";
        ARCPLAN.arcCgiSite = "http://localhost/.....";      

    </script>
</body>
</html>

// child. html

 <!DOCTYPE html> <html> <head>
    <title>COOKIE</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" /> </head> <body>

<script type="text/javascript">

    function getCookie(name) {      var arg = name + "=";       var alen = arg.length;      var clen = document.cookie.length;      var i = 0;      while(i < clen) {           var j = i
+ alen;             if(document.cookie.substring(i, j) == arg)
                return getCookieVal(j);             i = document.cookie.indexOf(" ", i) + 1;            if(i == 0)
                break;      }       return null;    }

    function getCookieVal(offset) {         var endstr = document.cookie.indexOf(";", offset);      if(endstr == -1)            endstr = document.cookie.length;        return document.cookie.substring(offset, endstr);   }   
            **parent.postMessage(getCookie("key"), "*");**   </script>

**<iframe id ="CA_FRAME" src="http://localhost/ibmcognos/bi/" style="display: none;" ></iframe>**   - *this url make the redirect from here and set the cookie, it takes time* 

</body> </html>

Пожалуйста, предоставьте мне несколько советов. Спасибо.

1 Ответ

0 голосов
/ 15 января 2020

Добавить событие загрузки в свой iFrame:

<iframe id ="CA_FRAME" src="http://localhost/ibmcognos/bi/" onload="onCaFrameLoad(this)" style="display: none;"></iframe>

Тогда вы можете запустить JS код только после полной загрузки кадра:

function onCaFrameLoad() {
    // wrap your post in this function
};

Таким образом, код будет работать только после завершения загрузки кадра.

Po C: родительский. html

<html>
    <body>
        PARENT- I get data from child
        <br /><br />
        <iframe id ="CA_FRAME_0" src="child.html"></iframe>
    </body>
</html>

дочерний. html

<html> 
    <body>
        CHILD - I send data to parent - but only after CA_FRAME has loaded
        <br /><br />
        <iframe id ="CA_FRAME" src="inner.html" onload="onCaFrameLoad(this)"></iframe>
        <script>
            function onCaFrameLoad() {
                alert('iframe has loaded! now you can send data to the parent');
            };
        </script>
    </body>
</html>

внутренний . html

<html> 
    <body>
        INNER - I load all my content, then the onCaFrameLoad function in child.html runs
        <script>
        alert('My Name is INNER - I load all my content first');
        </script>
    </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...