Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с html страницей с другого хоста

6.8K
12 апреля 2010 года
artemkaint
60 / / 12.07.2006
Задача с одной стороны простая, но на деле оказалась неподъемной...

Есть php файл генерирующий html страничку (php1.php) на хосте site1.ru (назовем его "СЕРВЕРОМ"). Есть сайт site2.ru ("КЛИЕНТ"), на который по средствам минимальных изменений нужно прикрутить ту страницу, что генерится на site1.ru... Если в общих чертах, то это что-то на подобии баннера.

соответственно, чтобы минимизировать изменения на site2.ru было принято решение юзать javascript (script1.js), подгружая его с site1.ru. (попутно передавая ему некоторый параметр (но это сути вопроса не играет проблем с этим не было))

[HTML]
<script charset="windows-1251"
type="text/javascript"
src= "http://www.site1.ru/script1.js?id=0">
</script>
[/HTML]

сам script.js тупо добавлял элемент div , а в него записывал iframe, ссылающийся на страничку php1.php c сайта site1.ru

Код:
var ifr = document.createElement('DIV');
//ifr.style.width = '470px';
//ifr.style.height = '250px';
ifr.style.borderStyle = 'solid';
ifr.style.borderWidth = '1px';
ifr.style.borderColor = 'ccc';
ifr.id = "infobook_partner";

ifr.style.borderTopWidth = '4px';

 var scriptList = document.getElementsByTagName("script");
 var script_link;
 for (var i = 0; i < scriptList.length; i++)
{
    //document.write(scriptList.src);
    if (scriptList.src.indexOf("script1.js")!=-1) {
        script_link = scriptList.src;
        break;
    }
}
//document.write(script_link);
var reg=/script\.js(\?.*)?$/;
var arr=reg.exec(script_link) ;

var id=arr[1];

ifr.innerHTML = '<iframe src="http://www.site1.ru/php1.php'+id+'" frameborder="yes" scrolling="no" height="700" width="700"></iframe>';

document.body.appendChild(ifr);



и тут вкралась огромная беда....


php1.php генерирует страничку различного размера (в зависимости от многих факторов)....и как выяснилось порулись размерами iframe не представилось никакой возможности из-за глупой политики бузопасности (как ее там зовут не помню). (ни "сверху" из js файла, ни снизу из php файла)....


тут пошла недельная эпопея с изучением азов черти каких технологий...

ajax - XmlHttpRequest .... каким бы он не был красавцем работать с другим хостом отказался...

Интерентус выдал решения:

1. прокси через php (ну или иные серверные скрипты)... решение не подходит т.к. на сервере 2 (site2.ru он же КЛИЕНТ) крайне нежелательны какие либо скрипты и вообще его трогать.

2. flash... ну тут все ясно - при сайте без flash он и тут отпадает.

3.
Цитата:
создание тега <script>

Это, кстати, один из способов AJAX, который не нашел широкого применения ввиду неудобства работы с ним. Ну вы же знаете: создаем новый тег, значение его аттрибута src — адрес файла, который нам нужен. Затем этот созданный тег добавляем в <head> или перед </body>. В общем возни много. Да плюс еще и формат подключаемого таким образом файла должен быть text/javascript. Кароче проще уж через XmlHttpRequest.

Но в случае кроссдоменных запросов многие вспоминают про этот способ, ведь подключать файлы можно с разных серверов. В итоге получился еще один вариант.



Честно скажу мало что понял. но в другом месте нашел "русский" перевод написанного это использование JSONP технологии...помучив ее...так и не смог нормально вернуть через нее html (очень сильно не нравятся ей теги всякие... либо неправильные литералы (если отправлять строки в одинарных ковычках))...тезнология имеет право жить, но либо я в ней затупил, либо она не подходит в моем случае (а только для передачи чистого текста)

4.

Цитата:
создание тега <link>

Это, пожалуй, самый необычный способ из увиденных мной. Принцип работы тот же, что и у предыдущего способа, только подключаемые файлы должны быть формата CSS. Вот тут у вас должен быть резонный вопрос: «Мне же данные нужны, нафига мне стили-то?». На этом этапе начинается самое интересное ;-) Смотрим пример возвращаемого файла:
#c0 { background: url(data:,Hello%20World!); }
#c1 { background: url(data:,I’m%20text%20encoded%20in%20CSS!); }
#c2 { background: url(data:,I%20like%20arts%20and%20crafts.); }

Ваши данные содержаться внутри dara:uri, неожиданный поворот, да? Вроде и CSS правильный, и данные есть.

Такой способ работы использует скриптик CSSHttpRequest или, как его еще называют — AJACSS.



тут какая-то вообще экзотика...чесно скажу даже не стал пробовать.

5. использование XhrIframeProxy

Цитата:

Это смесь из XmlHttpRequest и <iframe>. Способ основан на том, что ифреймы с разных доменов могут общаться друг с другом по средством изменения хэша из их адресов (хеш — это то, что идет после # в адресе). Этот способ отлично описан на сайте JavaScript.ru,



очень понравился способ (т.к. он самый близкий к моей изначальной идее)..сейчас начал с ним разбираться, но пока результата не получил...



ну вообщем друзья прошу большой помощи, т.к. я в полном тупике. Принимаются любые замечания - возможно я уже зашел слишком далеко не туда и теперь бьюсь об стену.


за ранее спасибо!

253
12 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Я, честно говоря, не понял, в чём собственно заключается "огромная беда".
Цитата: artemkaint
php1.php генерирует страничку различного размера (в зависимости от многих факторов)....и как выяснилось порулись размерами iframe не представилось никакой возможности из-за глупой политики бузопасности (как ее там зовут не помню). (ни "сверху" из js файла, ни снизу из php файла)....!


В смысле рулить размером? Зачем и куда?

По поводу всех методов - тоже не понятно, большинство из них мне знакомы (кроме разве что CSS о_О), и вполне рабочие. Какая у вас задача-то? Если у вас есть iframe с баннером, то пусть живёт. Если надо что-то в нём изменить после загрузки, можно просто в страницу клиента встроить JavaScript, который бы делал что-то с содержимым фрейма.

6.8K
12 апреля 2010 года
artemkaint
60 / / 12.07.2006
я когда встраиваю iframe я задаю ему вполне конкретные размеры (700 на 700 в примере)... но банер в реальности в базовом виде либо 700*300 либо 300*700... но со стороны КЛИЕНТА не известно какой банер сгенерируется....так что пока и задал такие размеры...но в реальности половина этого места все равно будет пустой.





Цитата:

Если надо что-то в нём изменить после загрузки, можно просто в страницу клиента встроить JavaScript, который бы делал что-то с содержимым фрейма.



так вот что самео интересное чтобы изменить iframe динамически мне нужно его проскроллить...а клиентский javascript скроллить его крайне нежелает.

6.8K
06 мая 2010 года
artemkaint
60 / / 12.07.2006
удалено
13
06 мая 2010 года
RussianSpy
3.0K / / 04.07.2006
Учитывая что у вас подгружается с разных хостов могу сказать с достаточно большой уверенностью - никаких средств кроме использования Flash и ему подобных вы не найдете. Политика безопасности не позволит вам работать ни с параметрами этого ифрейма, ни его содержимого.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог