2012-08-03 11 views
8

Sto avvolgendo una vista del rasoio in un iframe. La vista del rasoio è un servizio Web su un dominio diverso.Posizione file CSS rasoio come variabile

Ecco quello che sto facendo:

<!DOCTYPE html> 
<html> 
<body> 

<p align="center"> 
    <img src="http://somewhere.com/images/double2.jpg" /> 
</p> 

<p align="center"> 
<iframe src="https://secure.somewhereelse.com/MyPortal?CorpID=12334D-4C12-450D-ACB1-7372B9D17C22" width="550" height="600" style="float:middle"> 
    <p>Your browser does not support iframes.</p> 
</iframe> 
</p> 
</body> 
</html> 

Questa è l'intestazione del sito src:

<!DOCTYPE html> 
<html> 
<head> 
    <title>@ViewBag.Title</title> 
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
    <link href="@Url.Content("~/Content/themes/cupertino/jquery-ui-1.8.21.custom.css")" rel="stylesheet" type="text/css" /> 
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script> 
</head> 

Voglio che lo src iframe per usare il CSS del sito chiamata.

C'è un modo per passare l'URL CSS o ereditare il CSS del sito chiamante?

Mi accontenterei persino del fatto che il percorso del file css è un parametro passato dal sito di origine.

Qualcuno ha qualche suggerimento?

+2

Domanda SO duplicata: [CSS corpo di stile sovrapposto per contenuto in iframe] (http://stackoverflow.com/questions/6494721/css-overide-body-style-for-content-in-iframe). –

+0

Perché non includere i risultati del servizio Web sul lato server? – Gaurav

risposta

5

vorrei passare l'URL CSS come argomento per src l'attributo 's il iframe:

<iframe src="http://somedomain.com/[email protected](ResolveStyleUrl())"></iframe> 

Dove ResolveStyleUrl potrebbe essere definita come:

@functions { 

    public IHtmlString ResolveStyleUrl() 
    { 
    string url = Url.Content("~/Content/site.css"); 
    string host = "http" + (Request.IsSecureConnection ? "s" : "") + "//" + Request.Url.Host + url; 
    return Raw(url); 
    } 

} 

Questo è, naturalmente, supponendo che il dominio accetta una stringa di query url di stile e rende l'appropriato <link /> nella pagina remota?

6

Non è possibile applicare il tuo css sul tuo sito utilizzando un iframe. Il css deve essere incluso nell'origine della pagina inclusa in un iframe. Prima era possibile, ma in alcuni casi usando javascript e la pagina si trovava nello stesso dominio.

L'unico altro modo in cui è possibile utilizzare il proprio css è se il servizio Web consente di passare l'URL del css. Ma dovresti consultare la documentazione del servizio web per scoprirlo.

5

Eroc, mi dispiace, non è possibile applicare il CSS in loco degli altri utilizzando un iframe perché la maggior parte dei browser vi darà un errore come quello Chrome dà:

tentativo

Unsafe JavaScript per accedere telaio con URL http://terenceford.com/catalog/index.php? dal frame con l'URL http://www.example.com/example.php. Domini, protocolli e porte devono corrispondere.

Ma questo non significa che non è possibile estrarre il codice HTML da quella pagina (che può essere modificato secondo la vostra facilità)



http://php.net/manual/en/book.curl.php può essere utilizzato per il sito rottamazione con http://simplehtmldom.sourceforge.net/

Primo giocare con queste funzioni:

curl_init(); 
curl_setopt(); 
curl_exec(); 
curl_close(); 

e quindi analizzare il codice HTML.

Dopo aver provato te stesso, puoi guardare questo esempio qui sotto che ho fatto per analizzare il contenuto di beemp3, quando volevo creare un ricco strumento per scaricare direttamente i brani, sfortunatamente non potevo a causa del captcha ma è utile per voi


struttura di directory

C: \ wamp \ www \ tenta

- simple_html_dom.php

- try.php


try.php:

<?php 
/*integrate results for dif websites seperately*/ 
require_once('simple_html_dom.php'); 
$q='eminem'; 
$mp3sites=array('http://www.beemp3.com/'); 
$ch=curl_init("{$mp3sites[0]}index.php?q={$q}&st=all"); 
curl_setopt($ch,CURLOPT_HEADER,0); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
//curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
$result=curl_exec($ch); 
curl_close($ch); 
$html=str_get_html("{$result}"); 
$ret = $html->find("a"); 

echo "<head><style type='text/css'>a:link,a{font-size:16px;font-weight:bold;font-family:helvetica;text-decoration:none;color:#458;}a:hover{color:#67b;text-decoration:underline;}a:visited{color:silver;}</style></head>"; 
$unik=array(null); 
foreach($ret as $link) 
{ 
$find="/(.{1,})(\.php)[?](file=.{1,})&song=(.{1,})/i"; 
$replace="$4"; 
if(preg_match("{$find}",$link->href)) 
    { 
    $unik[]=$link->href; 
    if(current($unik)===prev($unik)){unset($unik);} 
    else{ 
    echo "<a href='".$mp3sites[0].$link->href."'>".urldecode(preg_replace($find,$replace,$mp3sites[0].$link->href))."</a><br/>"; 
    }} 
} 
?> 

so che non lo fai il codice in php, ma penso che tu sia in grado di tradurre il codice. Guarda questo: php to C# converter

Ho dedicato tempo a questa domanda perché solo io riesco a capire cosa significa offrire ricompensa. La risposta potrebbe non essere correlata (perché non ho usato la soluzione basata su javascript o html), ma a causa di problemi tra domini questa è una lezione importante per te. Spero che trovi librerie simili in C#. Buona fortuna

+1

Mi piacciono sempre le tue risposte e commenti Nina. Un'altra elegante soluzione pronta all'uso. –

2

L'unico modo che so di ottenere è quello di fare la richiesta HTTP sul lato server, recuperare il risultato e restituirlo all'utente.

Un minimo, è necessario rimuovere completamente l'intestazione dal sito di destinazione per iniettare il contenuto nella pagina utilizzando AJAX o iniettare il proprio css nelle intestazioni di pagina per inserirlo in un IFRAME.

In entrambi i casi è necessario implementare il metodo proxy, che considererà l'URL mirato come argomento.

Questa tecnica ha molti lati negativi:

  1. Devi fare le query su di voi server, che può costare un sacco di larghezza di banda e CPU
  2. È necessario implementare il proxy
  3. Non è possibile trasmettere i cookie specifici del dominio dell'utente, sebbene sia possibile gestire i nuovi cookie, riscrivendoli
  4. Se si fanno molte richieste è probabile che i server vengano inseriti nella lista nera sul/i sito/i di destinazione

I vantaggi sembrano bassi rispetto ai fastidi.

Problemi correlati