2011-05-07 1 views
4

Je viens de rencontrer un problème important car j'ai beaucoup de sources d'un autre domaine ce qui signifie que si j'utilise iframe, je dois redimensionner tous ces contenus. Mais le problème est que je ne peux pas modifier ou insérer du code dans la page web source. En raison de cela, je voudrais demander s'il existe d'autres solutions pour ignorer l'utilisation d'iframe? Conseils: J'ai besoin de tout le contenu (inclure des images, des css, etc.) de l'url. Ne fait pas partie du contenu.Existe-t-il une méthode pour remplacer iframe?

+0

J'espère que l'autre domaine est correct avec vous en utilisant ses données. – epascarello

+0

Oui. Je ne suis pas un hack ((: je déteste le client car ils ne veulent pas que je modifie leur code .Mais si c'est vraiment impossible je vais négocier avec eux – xiaohang

Répondre

1

La fonction include de PHP pourrait être le meilleur endroit pour commencer. Est-ce seulement le balisage que vous êtes incapable de changer, ou êtes-vous capable d'utiliser PHP et JavaScript?

EDIT:

Essayez d'utiliser include('http://www.google.com') pour inclure une URL dans votre page sans utiliser iFrame. Les références de répertoire non absolues dans le code (comme <img src='/img.png'> ne s'affichent pas ou ne se chargent pas correctement)

Si vous avez besoin de corriger ces références et que vous ne pouvez pas modifier le balisage lui-même, vous pouvez utiliser la fonction file_get_contents et de modifier des choses comme ceci:

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

Merci pour vos commentaires, je ne peux pas redimensionner le contenu du iframe parce qu'il est d'un autre domaine. Et le plus important est que je ne peux pas modifier la page source.Pour que je veux remplacer l'iframe.Pourriez-vous me donner plus d'informations ou comme un exemple de code.Merci – xiaohang

+0

Par ailleurs, il n'est pas un fichier php, il s'agit d'une certaine URL telle que http://www.google.com – xiaohang

+0

Vous pouvez inclure des URL avec la fonction d'inclusion de PHP. Essayez 'include" http://www.google.com ";'. cela ne fonctionne pas, vous devrez peut-être modifier la variable 'allow_url_include' de votre fichier php.ini Si vous avez besoin de modifier le contenu de la page affichée à l'URL, vous pouvez utiliser PHP [file_get_contents] (http: // php.net/manual/fr/function.file-get-contents.php) functi sur et modifier les données renvoyées. –

1

idée rapide - vous pouvez essayer d'écrire un proxy côté serveur et servir le contenu dans le iframe, mais src pointant vers la page proxy au lieu de la page réel (contrôlée avec les paramètres transmis)

+0

Merci beaucoup. De cette façon, je dois encore changer quelque chose dans la page source. Mais comme ce projet. c'est impossible de faire ça. Est-ce une autre solution? – xiaohang

+0

Je ne suis pas sûr de comprendre vos besoins. Quels changements dans la page source nécessiteront la solution avec proxy? – Marek

0

Effectuez un appel AJAX à l'aide du type de données JSONP rn le contenu de l'autre page. Vous devrez cependant apporter des modifications au code sur les deux domaines pour que cela fonctionne. http://en.wikipedia.org/wiki/JSONP

+0

Merci.Le problème est que je ne peux pas modifier le code dans le domaine source ... – xiaohang

-1

jQuery Charger dans un div http://api.jquery.com/load/

+1

Autre domaine - donc à moins d'utiliser CORS, pas possible – mplungjan

+0

ouais. C'est la partie la plus difficile à gérer pour moi. Je pense ne pas utiliser javascript, à la place je veux penser à utiliser PHP curl, par exemple, pour le slove. – xiaohang

+0

Oui, créez un proxy et incluez les fichiers sur le serveur. – mplungjan

0

réponse modifiée de @beanland, mon /proxy.php fichier, avec la mise en cache:

$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; 
} 

d'abord remplacer tous les <a href=""> liens vers votre proxy, remplacer tous les <img src="/path..."> par rapport absolu <img src="http://...">