Почему мое расширение Chrome не может использовать HTML5 postMessage для взаимодействия с фреймом, который я вставляю? - PullRequest
7 голосов
/ 02 ноября 2010

Итак, у меня есть страница на DomainA, и, используя расширение Chrome, я внедряю некоторый javascript, который вставляет iframe, который указывает на DomainB.

$("body").append("<iframe id='someFrame' src='http://www.domainB.com' width='300' height='800'></iframe>");

Я также внедряю некоторый javascript в DomainA, который пытается получить содержимое окна iframe. Я хочу использовать API postMessage HTML5 на нем.

$("body").append("<a class='myLink'>Post Message</a>");
$(".myLink").click(function(){
    var frameElem = document.getElementById("someFrame"); 
    console.log("frameElem: " + frameElem); //succeeds

var contentWin = frameElem.contentWindow;
console.log("contentWin : " + contentWin); //undefined

//can't do this since contentWin is undefined: 
//contentWin.postMessage("data", "*");
});

Однако свойство contentWindow не определено. Почему это так, и как я могу обойти это? Если я добавлю этот код расширения на веб-страницу, он будет работать сам по себе.

Спасибо!

(простите за дерьмовый jquery / javascript)

Ответы [ 3 ]

10 голосов
/ 02 ноября 2010

Я знаю, что отвечать на свой вопрос глупо, но я еще немного покопался и обнаружил ошибку, поданную в Chromium: http://code.google.com/p/chromium/issues/detail?id=20773

Я нашел эту ссылку в расширениях Chromium.группа: http://groups.google.com/a/chromium.org/group/chromium-extensions/browse_thread/thread/1d4b68f0971ef190/3446a7e82848351c?lnk=gst&q=contentWindow#3446a7e82848351c

1 голос
/ 02 ноября 2010

Я думаю, что по тем же причинам скрипты содержимого не могут получить доступ к объекту окна своей родительской страницы. См. этот вопрос , и он имеет ссылку на обходной путь.

0 голосов
/ 02 ноября 2010

Вам необходимо встроить iframe в корневой фрейм, который отправляет запросы клиентскому фрейму, который затем отправляет команды обратно на корневой веб-сайт, как показано в следующем примере. Это называется взломом «односторонней трубы». http://msdn.microsoft.com/en-us/library/bb735305.aspx
alt text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...