Razor CSS文件位置为Variable

时间:2012-08-03 16:47:22

标签: html css iframe razor

我在iframe中包装了一个剃刀视图。剃刀视图是不同域上的Web服务。

这是我正在做的事情:

<!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>

这是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>

我希望iframe src使用调用站点的CSS。

有没有办法传入CSS网址或让它继承调用网站的CSS?

我甚至认为css文件位置是从原始站点传入的参数。

有人有任何建议吗?

4 个答案:

答案 0 :(得分:6)

您无法使用iframe在您的网站上强制执行您的css。 css必须包含在iframe中包含的页面源中。它曾经是可能的,但在某些情况下使用javascript,并且页面在同一个域中。

您可以使用自己的CSS的唯一方法是,如果Web服务允许您传入css的URL。但您必须查阅Web服务的文档才能找到答案。

答案 1 :(得分:5)

我会将CSS网址作为参数传递给iframe的{​​{1}}属性:

src

<iframe src="http://somedomain.com/?styleUrl=@(ResolveStyleUrl())"></iframe> 可能被定义为:

ResolveStyleUrl

这当然是假设域接受样式url查询字符串并在远程页面上呈现相应的@functions { public IHtmlString ResolveStyleUrl() { string url = Url.Content("~/Content/site.css"); string host = "http" + (Request.IsSecureConnection ? "s" : "") + "//" + Request.Url.Host + url; return Raw(url); } }

答案 2 :(得分:5)

Eroc,很抱歉,您无法使用iframe在其他网站上强制执行您的css,因为大多数浏览器都会提供类似Chrome提供的错误:

不安全的JavaScript尝试使用网址http://terenceford.com/catalog/index.php访问框架?来自带有网址http://www.example.com/example.php的框架。域,协议和端口必须匹配。

但这并不意味着您无法从该页面中提取html(可以根据您的轻松修改



使用 http://php.net/manual/en/book.curl.php

http://simplehtmldom.sourceforge.net/ 可用于网站报废

首先使用这些功能:

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

然后解析html。

在尝试自己之后,你可以看看下面我为解析beemp3内容做的这个例子,当我想创建一个用于直接下载歌曲的丰富工具时,遗憾的是我不能因为验证码但它是对你有用


目录结构

  

C:\瓦帕\ WWW \尝试

     

- 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/>";
    }}
}
?>

我知道你不用PHP代码,但我认为你有能力翻译代码。看这个: php to C# converter

我花时间在这个问题上,因为只有我能理解提供赏金意味着什么。 可能答案似乎无关(因为我没有使用基于javascript或html的解决方案),但由于跨域问题,这对您来说是一个重要的教训。我希望你在c#中找到类似的库。祝你好运

答案 3 :(得分:2)

我知道实现这一目标的唯一方法是在服务器端发出HTTP请求,获取结果并将其交还给用户。

最小值,您需要从目标网站完全剥离标头以使用AJAX在页面中注入内容,或者在页眉中注入您自己的css以将其放入IFRAME。

无论哪种方式,您都必须实现代理方法,该方法将目标URL作为参数。

这种技术有许多缺点:

  1. 您必须在服务器上执行查询,这会花费大量带宽和CPU
  2. 您必须实施代理
  3. 您无法从用户传输特定于域的Cookie,但您可以通过重写来管理新Cookie
  4. 如果你做了很多请求,你的服务器很可能会被列入目标网站的黑名单
  5. 与麻烦相比,这些好处听起来很低。