Включенный JS в iframe имеет контекст окна верхнего фрейма - PullRequest
2 голосов
/ 03 мая 2011
$('<script/>', {
    src: '/path/to/javascript.js',
    type: 'text/javascript'
}).appendTo($('#iframe').contents().find('body'));

Поправьте меня, если я ошибаюсь, но я думаю, что это должно загрузить JS в iframe. Я также попытался добавить к head.

Проблема
javascript.js выполняется, но console.debug(this) в этом скрипте возвращает окно верхнего фрейма. Я пытался проверить, действительно ли скрипт включен в iframe, но не знаю как.

firebug output

Кроме того, запуск $('a') из javascript.js возвращает все ссылки в верхнем фрейме, а не все ссылки в iframe, которые мне бы хотелось.

Спасибо за ваше время!


Обновление: Я собрал изолированный тестовый пример , который вы также можете загрузить . Проверьте консоль и обратите внимание, что это верхняя рамка (может быть проверена переменной _TOP).

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Это вид серой области. Для этого конкретного действия с использованием jQuery под капотом вы используете importNode или adoptNode в зависимости от браузера. Тем не менее, IE не будет поддерживать (так как я в последний раз его исследовал).

Возможно, вы захотите получить ссылку на документ и написать скрипт. Если память мне не изменяет:

$('<iframe/>')[0].contentDocument.document.write('script');
0 голосов
/ 03 мая 2011

Мне удалось сделать что-то в том же домене, если обновление iframe:
http://jsfiddle.net/maniator/DX6bg/1/

Убедитесь, что два URL-адреса находятся в одном домене.
(включая, если есть www в или нет)

UPDATE

Вы можете проверить это так:

$(function(){
   var iframe = $('#iframe').contents();

   $('body', iframe).append($('<div>', {text: 'this is a test'}));
});

Теперь, если вы видите текст this is a test в iframe, вы знаете, что он работает

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