Почему JavaScript, внедренный в iframe, использует родительское окно в качестве своей глобальной области видимости? - PullRequest
1 голос
/ 16 марта 2012

При вызове Ajax я получаю «блоб» контента, который мне нужно добавить в iframe.Я не контролирую содержимое ... это может быть только HTML или HTML + JavaScript.

В качестве "шаблона" я использую пустой HTML-файл в качестве источника iframe.После события загрузки «iframe» я помещаю шарик в его тело.В основном это работает (используя jQuery):

$iframe.contents().find('body').html(my blob);

В результате получается, что "оконный" объект JS, внедренный в эту систему, является window.top, родительским окном.Почему?

Я думаю, что проблема может быть связана с тем, как работает jQuery html (), но я не могу найти кросс-браузерный способ выполнения той же операции без использования jQuery.

Любая помощь приветствуется.

Редактировать: это очень минимальный случай:

<iframe id="z" src="scene.html"></iframe>

<script>

var xxx = 13;

$("#z").load(function() {

  var c = "<scri" + "pt>console.log(xxx)</scr" + "ipt>";

  $(this).contents().find('body').append(c);

})

</script>

В консоли мы читаем «13» (и я не имею доступа к объектам JavaScript, которые ужеприсутствует в scene.html).

1 Ответ

0 голосов
/ 16 марта 2012

Добавьте это к вашему scene.html:

function myAppendFunc(html) {
    $('body').append(html);
}

Тогда позвоните извне:

$("#z").load(function() {
    var c = "<scri" + "pt>console.log(xxx)</scr" + "ipt>";
    this.contentWindow.myAppendFunc(c);
})

Это должно сработать.

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