Небезопасный доступ к Javascript из Iframe в расширении Chrome - PullRequest
2 голосов
/ 07 ноября 2011

Я создаю расширение Chrome, которое будет использовать Iframes, которые загружают Flash-контент. Используя Mootools в Iframe, я создаю объект .swf, а затем внедряю его в себя. Этот Iframe, main.html, вставляет объект flash следующим образом:

window.addEvent("domready", function () {
    var flashContainer = $("flash-container");

    new Swiff("http://www.example.com/content.swf", {
        "width":"100%",
        "height":"90%",
        "id":"flash-content"
    }).inject(flashContainer);
});

Это приводит к следующей ошибке:

Небезопасная попытка JavaScript получить доступ к фрейму с URL-адресом chrome-extension: //......../index.html из фрейма с URL-адресом http://www.example.com/main.html. Домены, протоколы и порты должны совпадать.

Когда я удаляю часть кода для инъекции, я не получаю сообщение об ошибке. Кроме того, когда я использую инъекцию для других не флэш-элементов, таких как div, я не получаю ошибку. Я также пытался использовать простой Java-метод appendChild только для того, чтобы получить ту же ошибку.

Есть идеи, почему я могу получить эту ошибку только на флэш-объекте? И есть ли способ добавить этот элемент флэш-памяти без этой ошибки?

1 Ответ

1 голос
/ 27 марта 2013

@ MishcaNix и @serg правы.

Любой междоменный вызов ресурса, который не является JSONP, вызовет эту ошибку безопасности.Вам нужно будет либо найти способ внедрить содержимое SWF на страницу в том же домене, что и файл swf, либо взять SWF (если он статический) и сделать его URL-адресом данных (data: application / x-swf;base64 или что-то подобное).- MischaNix

Всякий раз, когда флэш-объект внедряется в междоменный фрейм, он генерирует междоменное исключение.Это верно для Youtube и Vimeo.

Например, проверьте этот jsfiddle со встроенным iFrame: http://jsfiddle.net/bkCdB/

<object width="420" height="315"><param name="movie" value="http://www.youtube.com/v/6V_DsL1x1uY?version=3&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/6V_DsL1x1uY?version=3&amp;hl=en_US" type="application/x-shockwave-flash" width="420" height="315" allowscriptaccess="always" allowfullscreen="true"></embed></object>
...