2016-11-07 4 views
0

구문에 문제가있는 것 같지만 iframe에 변수를 보내려고합니다 (사용할 ColorBox 용). 당분간 나는 양쪽 도메인에서 도메인을 수락하고 있습니다.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); 
} 
}); 

그리고 여기에 수신 페이지입니다 : 여기에 보내는 페이지에 대한 JS입니다

$(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

또한'event.' 매개 변수를 사용하여 함수 외부에'console.log (event)'가 있습니다. 그게 뭐야? – Barmar

+0

'origin'은'event.origin'이어야한다고 생각하지만, 왜 그걸 귀찮게합니까? 결코'*'일 수 없으며, 항상 URL입니다. – Barmar

답변

0

iframe의 페이지가로드되기 전에 메시지를 보내므로 message 수신기가 아직 설정되지 않았습니다.

iframe을 준비 할 때 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"인수 목록 뒤에 "오류가 발생했으며 그것이'receiveMessage (event)'어딘가에 있음을 나타냅니다 ... jQuery의 .on() docs에 따라 모두 멋지게 보입니다. 어떤 아이디어? – Daniel

+0

죄송합니다. 편집상의 실수였습니다. 'function (event)'이어야합니다. – Barmar

+0

고마워, 이제 작동 중입니다. 그러나 event.data가 '정의되지 않음'을 반환하는 이유를 알고 있습니까? 변수가 보내는 페이지에서 올바르지 만 올바르게 전달되지 않은 것 같습니다. – Daniel