Вставка javascript / css в iframe в разных доменах - PullRequest
1 голос
/ 28 февраля 2011

У меня есть локальная веб-страница (в моей файловой системе).Я хочу загрузить iframe на страницу, которая отображает domain.com.Я хочу изменить содержание iframe.

Я могу получить доступ к domain.com и получить их для размещения файла javascript для меня.Так что это должно означать, что я не сталкиваюсь с вопросом того же происхождения .Мой файл загружается целую вечность, как это делается другой командой и т. Д. Моя идея была на сервере domain.com в моем файле js. Я мог бы вызвать другой файл js на myserver.com.Включается ли он в js-файл domain.com, он должен работать ... ну, это не так.

Возможно ли это?

js-файл domain.com выглядит следующим образом:

$(document).ready(function(){
    $.getScript("http://www.myserver.com/my.js");
});

my.js на моем сервере выполняет

alert($("iframeID").contents().find('body').html());

Возвращается ноль

Если в my.js я выполняю

alert('test');

Тест предупрежден для меня.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011

Политика Same Origin применяется к page источникам, а не к JavaScript. Если ваша страница находится в одном месте (URL-адрес file://), а другая - в другом домене, то не имеет значения, где размещен ваш скрипт.

1 голос
/ 01 марта 2011

Я не уверен, что получил ваш сценарий на 100%. Поправь меня, если я ошибаюсь:

  1. У вас есть страница с iframe, и iframe указывает на страницу на domain.com
  2. Страница на domain.com пытается получить ваш скрипт с myserver.com, используя $.getScript()
  3. Скрипт при загрузке должен изменить DOM на странице в domain.com (тот, что в iframe)
  4. Элемент iframeID в вашем примере кода alert($("iframeID")... относится к iframe на вашей странице, где отображается страница с domain.com

Если это правильно, проблема в том, что javascript, выполняющийся внутри iframe на domain.com, ничего не знает о iframe. Он даже не знает, что это в фрейме. Вы можете манипулировать страницей, как и любой другой HTML-документ, потому что скрипт выполняется на странице в domain.com - не имеет значения, откуда был взят скрипт.

Таким образом, вы можете распечатать body страницы в domain.com очень просто:

alert($(body).html())
...