2016-11-07 7 views
0

Я уверен, что это просто проблема с моим синтаксисом, но я пытаюсь отправить переменную в iframe (для использования colorbox). Пока я принимаю любые домены на обоих концах (просто чтобы заставить его работать). Вот это JS для отправки страницы:Использование postMessage() не принимается

$(document).ready(function() { 
if(window.location.hash) { 
    var urlimage = window.location.hash.substring(1); 
    targetiframe = document.getElementById('wbgallery').contentWindow; 
    targetiframe.postMessage(urlimage, "*"); 
    console.log(urlimage); 
} 
}); 

А вот получающая страница:

$(document).ready(function() {  
window.addEventListener('message',receiveMessage); 
console.log(event); 
function receiveMessage(event) { 
    if (origin !== "*") 
    return; 
    inbound = event.data; 
    console.log(inbound); 
} 
}); 

Я вижу журнал консоли для urlimage и могу видеть событие, но ничего для въездного. Я использую Mozilla's explanation, чтобы попытаться все исправить.

+1

'receiveMessage' использует переменную' origin', который никогда не был установлен. Поэтому он возвращается. – Barmar

+0

У вас также есть 'console.log (event)' вне функции с параметром 'event'. Что это должно было делать? – Barmar

+0

Я думаю, что 'origin' должно быть' event.origin', но почему вы так беспокоитесь? Он никогда не может быть '*', это всегда URL. – Barmar

ответ

0

Вы отправляете сообщение перед загрузкой страницы в iframe, поэтому слушатель message еще не установлен.

Вы можете отправить IFrame сообщение родителю, когда оно будет готово, а затем отправить сообщение после этого.

код Родитель:

$(document).ready(function() { 
    if (window.location.hash) { 
    var urlimage = window.location.hash.substring(1); 
    var targetiframe = document.getElementById('wbgallery').contentWindow; 
    $(window).on("message", function(e) { 
     targetiframe.postMessage(urlimage, "*"); 
     console.log(urlimage); 
    }); 
    } 
}); 

Iframe код:

$(document).ready(function() { 
    $(window).on('message', function(event) { 
    inbound = event.data; 
    console.log(inbound); 
    }); 
    window.parent.postMessage("ready", "*"); 
}); 
+0

Привет, только быстро вопрос. Я получаю сообщение «Uncaught SyntaxError: missing» после аргумента списка «error» и указываю, что он где-то в 'receiveMessage (event)' ... Я не понимаю, как все выглядит нормально в соответствии с документами .on() djQuery. Есть идеи? – Daniel

+0

Извините, это была ошибка редактирования, она должна быть 'function (event)' – Barmar

+0

Спасибо, сейчас работает. Однако вы знаете, почему event.data будет возвращать «undefined»? Переменная правильная на странице отправки, но кажется, что она не передана правильно? – Daniel

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