Есть ли какой-либо способ заменить iframe?

#php #javascript #iframe

#php #javascript #iframe

Вопрос:

Я только что столкнулся с важной проблемой, поскольку у меня много источников из другого домена, что означает, что если я использую iframe, мне приходится изменять размер всего этого содержимого. Но проблема в том, что я не могу изменить или вставить код на исходную веб-страницу. Из-за этого я хотел бы спросить, есть ли какие-либо другие решения, позволяющие отказаться от использования iframe? Советы: Мне нужно все содержимое (включая изображения, css и так далее) из URL. Не является частью содержимого.

Комментарии:

1. Я надеюсь, что другой домен не возражает, если вы используете там данные.

2. Да. Я не хакер ((: Я ненавижу заказчика, поскольку они не хотят, чтобы я изменял их код. Но если это действительно невозможно, я буду вести переговоры с ними

Ответ №1:

Быстрая идея — вы могли бы попробовать написать прокси на стороне сервера и обслуживать содержимое в iframe, но с src, указывающим на страницу прокси вместо реальной страницы (т. Е. управляемой переданными параметрами)

Комментарии:

1. Большое спасибо. Таким образом, мне все равно придется что-то изменить на исходной странице. Но поскольку этот проект. это невозможно сделать. Есть ли какое-либо другое решение?

2. Я не уверен, понимаю ли я ваши потребности. Какие изменения на исходной странице потребуют решения с прокси?

Ответ №2:

Функция include PHP может быть лучшим местом для начала. Это просто разметка, которую вы не можете изменить, или вы можете использовать PHP и JavaScript?

Редактировать:

Попробуйте использовать include('http://www.google.com') для включения URL-адреса на вашей странице без использования iFrame. Любые неабсолютные ссылки на каталоги в коде (например <img src='/img.png'> , не будут отображаться или загружаться корректно.

Если вам нужно исправить эти ссылки и у вас нет возможности изменить саму разметку, вы можете использовать file_get_contents функцию и изменять подобные вещи следующим образом:

 $page = file_get_contents('http://www.google.com');
$page = preg_replace('/(href|src)=(['"])//',"$1=$2http://google.com/",$page);
echo $page;
  

Комментарии:

1. Спасибо за ваши комментарии. Я просто не могу изменить размер содержимого iframe, потому что оно из другого домена. И самое главное, я не могу изменить исходную страницу. Так что я хочу заменить iframe. Не могли бы вы дать мне больше информации или какой-нибудь пример кода. Спасибо

2. Кстати, это не php-файл, это определенный URL, такой как google.com

3. Вы можете включать URL-адреса с помощью функции include в PHP. Попробуйте include "http://www.google.com"; . Если это не сработает, возможно, вам потребуется изменить allow_url_include переменную вашего файла php.ini. Если вам нужно изменить содержимое страницы, отображаемой по URL, вы можете использовать функцию file_get_contents PHP и изменить возвращаемые данные.

4. @beanland спасибо, ваш ответ мне очень помог! особенно с проблемой ссылок.

Ответ №3:

Выполните вызов AJAX, используя тип данных JSONP, чтобы вернуть содержимое другой страницы. Однако вам нужно будет внести изменения в код в обоих доменах, чтобы это заработало. http://en.wikipedia.org/wiki/JSONP

Ответ №4:

Измененный ответ @beanland, мой /proxy.php файл с кэшированием:

 $host = parse_url($_GET['url'], PHP_URL_HOST);
$dir  = $_SERVER[DOCUMENT_ROOT].'/cache_proxy/'.$host;
if(!is_dir($dir))
    mkdir($dir);
$filepath = $dir.'/'.md5($_GET['url']);

if(is_file($filepath)){
    include($filepath);

}else{
    $page = file_get_contents($_GET['url']);

    $page = preg_replace('/(a href)=['"](http.*)['"]/', '$1="http://buy/proxy.php?url=$2"', $page);
    $page = preg_replace('/(a href)=['"][^http](.*)['"]/', '$1="http://buy/proxy.php?url=http://'.$host.'/$2"', $page);
    $page = preg_replace('/(href|src)=['"][^http ](.*)['"]/', '$1="http://'.$host.'/$2"', $page);

    file_put_contents($filepath, $page);

    echo $page;
}
  

Сначала замените все <a href=""> ссылки на ваш прокси, затем замените все относительные <img src="/path..."> ссылки и т.д. на абсолютный <img src="http://...">

Ответ №5:

Загрузка jQuery в div http://api.jquery.com/load /

Комментарии:

1. Другой домен — поэтому, если он не использует CORS, невозможно

2. да. Это самая сложная часть для меня, с которой приходится иметь дело. Я думаю не использовать javascript, вместо этого я хочу подумать об использовании PHP curl, например, для его расширения.

3. Да, создайте прокси и включите файлы на сервер.