2016-08-15 4 views
3

Я не могу получить это обходное решение CORS для работы в Chrome 52.0. Моя iframe и родительская страница находятся на разных поддоменах.Невозможно вызвать функцию в дочернем iframe родителем через postMessage() - перекрестное происхождение

слушатель события моего Iframe в:

window.onload = function() { 
    window.addEventListener("message", function(event) { 
     //doesn't log it 
     console.log('message'); 
     if(event.data === "invokeChildFunction()") { 
      childFunction(); 
     } 
    }); 
    function childFunction() { 
     alert('Parent frame just invoked my function') 
    } 
} 

Родитель рама:

var iframeWindow = $('iframe').contentWindow; 
var invokeChildFunction = function() { 
    iframeWindow.postMessage("invokeChildFunction()", "https://mansion-assessment-sdimoff.c9users.io/CORS/index.html"); 
} 

invokeChildFunction() ничего не войти на странице Iframe в

+0

Какова цель присвоения 'window'' iframe' в 'var window = $ ('iframe'). ContentWindow;'? – guest271314

+0

@ guest271314 Я пытаюсь ссылаться на окно iframe. Как еще я должен это делать? –

+0

Попробует идентификатор, отличный от 'window', чтобы избежать путаницы. У 'окна' есть разное происхождение? – guest271314

ответ

1

Вы должны попробовать использовать

В исходный код:

var iframe = $('iframe')[0]; 
iframe.contentWindow.postMessage('invokeChildFunction', iframe.contentWindow.location); 

В детстве/IFRAME:

window.addEventListener('message', function (event) { 
    if (event.data === 'invokeChildFunction') { 
    // do whatever you want to 
    } 
}) 

То, что вы сделали неправильно было выбора элементов с тегом-имени, по выбору элементов с именем тега вы получаете массив элементов, так что вы должны ссылаться на них как массив ,

Также используйте некоторую валидацию для проверки источника событий.

+0

Будет ли это работать, если, как указывает OP, My iframe и родительская страница находятся на разных поддоменах. – Gervase

+0

Да window.postMessage может использоваться для связи между страницами в разных поддоменах. Вы можете [проверить это] (https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) для дальнейшего уточнения. – Avi

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