Подгрузка с другого домена
Есть задача: имеется сайт, при выборе некого пункта меню необходимо подгрузить и вывести страницу с другого домена. Данная страница должна открываться в диве блока поверх основной. То есть всплывающее окно. Как это сделать?
На данном этапе, с помощью jQuery и javascript-а меняется параметр display c none на block, меняется адрес iFrama и красиво выводится в iFrame нужная страница. Все бы ничего, но подгружаемая страница может долго грузиться, и тогда всплывает пустое окно, а через несколько секунд появляется сам сайт.
Появилась необходимость в прелоадере. Я читал, что с помощью ajax можно подгружать, а пока грузится выводить прелоадер, однако нигде не могу найти, как подгрузить страницу с другого домена.
Подскажите как это сделать, или как приладить прелоадер к iFram-у.
Я обычно не доверяю JavaScript, ведь он может быть отключен у клиента, если речь не идёт о серверном JavaScript.
Я бы скачал страницу другого домена через file_get_contents("http://другой домен").
Но если она может долго грузиться, то может быть через fopen, а если таймаут, то закрываем соединение и достаём её из кэша.
Кэш - это страница другого домена, сохранённая предварительно у нас на сервере и обновляемая по мере удачных попыток соединения.
После этого у нас будет html-код странички другого домена - делаем с ним что хотим.
Вариант с кэш-ом не катит, так ка таких страниц очень много. Грузятся они долго не из-за того, что тяжелые, а из-за того, что собираются непосредственно в момент запроса.
Первый вариант я думаю, что тоже не прокатит, так как страница- это форма заявки и содержит свои скрипты.
Вероятно моя попытка описать задачу проще с крахом провалилась. Попробую еще раз:
Есть сайт агентства с поиском интересующих предложений. Данный поиск нам представлен сторонней компанией. При нахождении нужного предложения посетитель может заполнить форму на бронь. Данная форма предоставляется той-же компанией, что и поиск, однако открывается он в новой вкладке. Необходимо сделать так, чтоб заявка открывалась во всплывающем окне.
По идее, нас не интересуют люди с отключенными скриптами, так-как они просто не смогут ничего найти у нас.
простенький пример:
Код:
<script language="javascript">
function addHandler(object, event, handler)
{
if (typeof object.addEventListener != 'undefined')
object.addEventListener(event, handler, false);
else if (typeof object.attachEvent != 'undefined')
object.attachEvent('on' + event, handler);
else
throw "Incompatible browser";
}
function removeHandler(object, event, handler)
{
if (typeof object.removeEventListener != 'undefined')
object.removeEventListener(event, handler, false);
else if (typeof object.detachEvent != 'undefined')
object.detachEvent('on' + event, handler);
else
throw "Incompatible browser";
}
function loadframe()
{
var frameurl=document.getElementById('frameurl').value;
var div=document.getElementById('wait');
div.style.display='';
var frame=document.getElementById('frame');
frame.style.display='none';
frame.src=frameurl;
addHandler(frame,'load',frameload);
}
function frameload()
{
var div=document.getElementById('wait');
var frame=document.getElementById('frame');
div.style.display='none';
frame.style.display='';
removeHandler(frame,'load',frameload);
}
</script>
<input type='text' id='frameurl' value='http://www.yaplakal.com/'></input>
<input type='button' onclick="loadframe();" value="Load"></input>
<div id="blah"><div id='wait' style="display:none;">PLEASE WAIT...</div><iframe id="frame" style="display:none; width:500px; height:500px;">oO</iframe></div>
function addHandler(object, event, handler)
{
if (typeof object.addEventListener != 'undefined')
object.addEventListener(event, handler, false);
else if (typeof object.attachEvent != 'undefined')
object.attachEvent('on' + event, handler);
else
throw "Incompatible browser";
}
function removeHandler(object, event, handler)
{
if (typeof object.removeEventListener != 'undefined')
object.removeEventListener(event, handler, false);
else if (typeof object.detachEvent != 'undefined')
object.detachEvent('on' + event, handler);
else
throw "Incompatible browser";
}
function loadframe()
{
var frameurl=document.getElementById('frameurl').value;
var div=document.getElementById('wait');
div.style.display='';
var frame=document.getElementById('frame');
frame.style.display='none';
frame.src=frameurl;
addHandler(frame,'load',frameload);
}
function frameload()
{
var div=document.getElementById('wait');
var frame=document.getElementById('frame');
div.style.display='none';
frame.style.display='';
removeHandler(frame,'load',frameload);
}
</script>
<input type='text' id='frameurl' value='http://www.yaplakal.com/'></input>
<input type='button' onclick="loadframe();" value="Load"></input>
<div id="blah"><div id='wait' style="display:none;">PLEASE WAIT...</div><iframe id="frame" style="display:none; width:500px; height:500px;">oO</iframe></div>
$('#container').load('http://google.com') загрузит и с другого домена)) и $.ajax({method: 'GET'}) и $.get()
Я искал как осуществить подгрузку и видимо слишком зациклился на ajax-е, совсем забыл про такую возможность у iframe-а.
Mr.Hacker, данными методами у меня не получилось. Страница не грузится + многие пишут, что данные методы не всегда работают по отношению к другим доменам. Все-же я и вам благодарен за проявленный интерес. )))
Цитата: Meatcoins
Я бы скачал страницу другого домена через file_get_contents("http://другой домен").
Плохой совет ввиду блокируемого характера file_get_contents. Правильнее юзать асинхронные с поддержкой таймаутов соединений.
Мне нравится