2011-12-08 23 views
47

C'è un modo per incorporare una pagina Web esterna senza utilizzare un iframe? Ho accesso a entrambi i siti, voglio solo la pagina in cui il contenuto è incorporato per ridimensionare in base al contenuto che è incorporato (cambierà nel tempo e sarà su più siti).Incorporare una pagina esterna senza un Iframe?

Grazie!

EDIT: Non penso che nessun tipo di AJAX possa funzionare perché è cross-site e JavaScript non consente di caricare i contenuti fuori sito (per quanto ne so).

risposta

38

Si potrebbe caricare la pagina esterna con jQuery:

 
<script>$("#testLoad").load("http://www.somesite.com/somepage.html");</script> 
<div id="testLoad"></div> 
//would this help 
+1

+1 - Penso che sarà comunque necessario consentire una chiamata ajax su più domini da www.orginaldomain.com a www.somesite.com. – DefyGravity

+1

Non penso che sia possibile utilizzare javascript include perché è limitato per motivi di sicurezza. DefyGravity, come potrei farlo? – JacobTheDev

+11

Questo codice dipende dall'abilitazione della pagina esterna "allow-control-allow-origin: *", che non è possibile garantire. – FlavioEscobar

2

La domanda è buona, ma la risposta è: dipende da questo.

Se l'altra pagina Web non contiene alcun modulo o testo, ad esempio, è possibile utilizzare il metodo CURL per prelevare il contenuto esatto e successivamente visualizzare sulla pagina. Puoi farlo senza usare un iframe.

Tuttavia, se la pagina che si desidera incorporare contiene ad esempio un modulo, non funzionerà correttamente, poiché la gestione del modulo si trova su quel sito.

28

Oppure si potrebbe usare il tag oggetto:

http://jsfiddle.net/7MaXx/

<!--[if IE]> 
<object classid="clsid:25336920-03F9-11CF-8FD0-00AA00686F13" data="http://www.google.be"> 
<p>backup content</p> 
</object> 
<![endif]--> 

<!--[if !IE]> <--> 
<object type="text/html" data="http://www.flickr.com" style="width:100%; height:100%"> 
<p>backup content</p> 
</object> 
<!--> <![endif]--> 
+1

Il tag dell'oggetto ha problemi con l'altezza. anche se dare altezza: 100%; ancora non funziona funziona solo con un valore di altezza fisso. Altro bisogno di ottenere l'altezza e la larghezza della pagina web esterna. quel qualcosa che non riuscivo a trovare ancora. Se potessi per favore aiutare –

+0

puoi impostare l'altezza a qualcosa come 2500px o qualcosa del genere ... Ho lo stesso problema. –

+0

Per il mio caso ho dovuto visualizzare un contenuto HTML creato dinamicamente all'interno dell'oggetto. Stavo sostituendo l'attributo dati del runtime del tag object usando jQuery come segue. element.attr ("data", "data: text/html; charset = utf-8," + escape (HTMLContent)) e ha funzionato come fascino. –

1

Che dire qualcosa di simile?

<?php 
$URL = "http://example.com"; 
$base = '<base href="'.$URL.'">'; 
$host = preg_replace('/^[^\/]+\/\//', '', $URL); 
$tarray = explode('/', $host); 
$host = array_shift($tarray); 
$URI = '/' . implode('/', $tarray); 
$content = ''; 
$fp = @fsockopen($host, 80, $errno, $errstr, 30); 
if(!$fp) { echo "Unable to open socked: $errstr ($errno)\n"; exit; } 
fwrite($fp,"GET $URI HTTP/1.0\r\n"); 
fwrite($fp,"Host: $host\r\n"); 
if(isset($_SERVER["HTTP_USER_AGENT"])) { fwrite($fp,'User-Agent: '.$_SERVER 

["HTTP_USER_AGENT"]."\r\n"); } 
fwrite($fp,"Connection: Close\r\n"); 
fwrite($fp,"\r\n"); 
while (!feof($fp)) { $content .= fgets($fp, 128); } 
fclose($fp); 
if(strpos($content,"\r\n") > 0) { $eolchar = "\r\n"; } 
else { $eolchar = "\n"; } 
$eolpos = strpos($content,"$eolchar$eolchar"); 
$content = substr($content,($eolpos + strlen("$eolchar$eolchar"))); 
if(preg_match('/<head\s*>/i',$content)) { echo(preg_replace('/<head\s*>/i','<head>'. 

$base,$content,1)); } 
else { echo(preg_replace('/<([a-z])([^>]+)>/i',"<\\1\\2>".$base,$content,1)); } 
?> 
+0

L'OP ha richiesto una soluzione JS. Inoltre, nei tag non c'è nulla dell'OP usando PHP, solo ASP.net –

+0

Anche se non è la soluzione esatta, è uno script php molto utile per gli altri utenti, +1 – electroid

+0

Non è una risposta valida per un requisito JS. Non uso PHP. Come mi aiuterà? Si potrebbe mettere uno pseudo codice però. Sarebbe utile – Tarun

1

Perché non utilizzare PHP! E 'tutto lato server:

<?php print file_get_contents("http://foo.com")?> 

Se si possiede entrambi i siti, potrebbe essere necessario ok questa transazione con piena dichiarazione di intestazioni dal lato server. Funziona magnificamente.

+0

Php farà la jpb fine, producendo un carico extra sul tuo server. Le soluzioni lato client (js) manterranno il tuo server piacevole e fresco – augusto

Problemi correlati