У меня есть компонент в 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);
}
Это не работает для меня. Кто-нибудь видит, что я делаю неправильно или лучший способ сделать это?
Можете вы добавить ошибку, которую видите в консоли разработчика? –