#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. Да, создайте прокси и включите файлы на сервер.