Iframe: как избежать PostMessage - PullRequest
0 голосов
/ 01 июля 2019

У меня есть Iframe, который показывает контент со стороннего сайта и отправляет postMessage обратно родителю, когда его контент загружен.Код работает, когда публикуется на рабочем сервере (я думаю, из-за CORS-настроек), но не при разработке на моем локальном компьютере.В нем говорится:

"Не удалось выполнить 'postMessage' для 'DOMWindow': предоставленный целевой источник ([Внешний сайт]) не соответствует источнику окна получателя ([Мой локальный хост])."

Возможно ли, чтобы Iframe общался с родителем без использования postMessage?Например, если родитель добавляет триггер addEventListerner ("load") в Iframe?

Вот несколько тестовых кодов:

<div id="parentDiv"></div>

<script type="text/javascript"> 

function LoginToExternalSite() {
     // Doing 1-3 AJAX-calls to the 3:rd party site to 
     // make sure the application are allowed to use it.
     // If logged in, it calls LoadIframe.
     LoadIframe();
}

function LoadIframe(){      
    var div = document.getElementById("parentDiv");     

    var iframe = {};
    iframe = document.createElement("iFrame");
    iframe.id = "infra3dapi";
    iframe.style.height = '100%';
    iframe.style.width = '100%';
    iframe.style.border = 'none';
    iframe.style.overflow = 'hidden';
    iframe.src = "https://example.com";     
    div.appendChild(iframe);

    iframe.onload = function() {            
        iframe.contentWindow.parent.postMessage("Hello", 'https://example.com');                    
    };      
}

$(document).ready(function() {

      $(window).on("message", function(e) {           
            console.log("Messaged recieved.");
      });

      LoginToExternalSite();    
}); 

...