2016-05-10 4 views
0

У меня есть компонент в AEM (Adobe Experience Manager - cms) на странице, и я хочу включить эту страницу на другую страницу (из другого домена), используя iframe. Поэтому в коде для компонента я использую window.postMessage(), и я пытаюсь прослушать это событие в родительском. Я пробовал общаться другим способом, родительский с iframe, и он отлично работал, но мне нужно обмениваться другим путем. Таким образом, компонент является компонентом поиска, и когда вы нажимаете на результат поиска, я хочу перенаправить, но из родительского окна, поэтому я пытаюсь отправить URL-адрес для перенаправления и затем обработать перенаправление в JS-коде родителя.Пересечение домена от ребенка (iframe) до родителя не работает

код выглядит следующим образом:

(от родителя - HTML)

<iframe 
    width="1080" 
    height="700" 
    id="theFrame" 
    src="http://localhost:4502/content/zebra1/global/en_us/hey.html#q=print" 
    frameborder="0"> 
</iframe> 

(От родителя - JS)

function receiveMessage(e) 
{ 
    var key = e.message ? "message" : "data"; 
    var data = e[key]; 
    var redirect = JSON.parse(data); 
    redirectUrl = (redirect.origin ? redirect.origin : '') + (redirect.url ? 
    redirect.url : ''); 
    if (redirectUrl) { 
     window.location.href = redirectUrl; 
    } 
} 

window.addEventListener("message", receiveMessage, false); 

(из фрейма/ребенок - js)

goToSearchResults : function(event){ 

    var windowOrigin  = location.origin; 

    if(arguments[0].length == 3){ 
     var redirect = { 
      origin: windowOrigin, 
      url: arguments[0][1].url || '' 
     }; 
     if(!$('#supportSearchWrap').data('iframe')) { 
      location.replace(redirect.url); 
     } else { 
      window.postMessage(JSON.stringify(redirect), windowOrigin); 
     } 
    } 
    logger.log(redirect.origin + redirect.url , this.model); 

} 

Это не работает для меня. Кто-нибудь видит, что я делаю неправильно или лучший способ сделать это?

+0

Можете вы добавить ошибку, которую видите в консоли разработчика? –

ответ

0

window.postMessage - window относится к экземпляру объекта окна, на который вы отправляете сообщение. В вашем случае он должен быть родителем окна iframe.
Вы можете получить эту ссылку внутри iframe, используя window.parent или просто parent.

Кроме того, свойство targetOrigin должно соответствовать целевым свойствам окна. От MDN docs, как показано ниже.

targetOrigin Указывает, что происхождение otherWindow должно быть для события должны быть отправлены, либо в виде символьной строки «*» (что указывает на отсутствие предпочтения) или в качестве URI. Если во время отправки запланированного события схема, имя хоста или порт другого документаWindow не совпадают с данными, указанными в targetOrigin, событие не будет отправлено; только если все три матча отправят событие.

Смежные вопросы