我在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文件位置是从原始站点传入的参数。
有人有任何建议吗?
答案 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://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作为参数。
这种技术有许多缺点:
与麻烦相比,这些好处听起来很低。