如何解决IFrame 跨域问题 实例证明可行--许多网友认为这个无法实现
先说下A网站有2个(Iframe1 name=“content” , Iframe2)
首先A网站Iframe2 引用的是B网站的页面c,B网站页面c的链接内容全部显示再这个IFrame1中。 开始 我以为 只要在B网站的链接 上加个 target=“content ” 就能解决 后来实践证明 不行,效果只是跳出了这个页面,没有在Iframe中显示。 后来我又想到 用js动态 改变Iframe 的src 属性的值, 结果Iframe src 无法实现跨域更改(同一个网站是可以的)。(如果这个可以实现,个人认为 这是个很大的安全漏洞。)
那 我们该 如何实现呢? 我们上面说过 同一个网站是可以的,那么我们可以把B网站的页面的HTML 值 获取出来 显示在A 页面上不就可以了吗.
具体的实现方式其实很简单: 我的实现方式在mvc 中 其实在aspx 或者其他的 开发方式都是可行的
action 代码:
public ActionResult baidu() { //为指定的URI打开一个可读的数据流,并定义一个该流的引用 WebClient wc = new WebClient(); var host = System.Configuration.ConfigurationManager.AppSettings["OAHost"]; Stream resStream = wc.OpenRead(host + "Main/NopMenuTree.aspx?id=itsoft"); //这个URL是B页面C的地址 //根据上面定义的数据流,以默认编码的方式定义一个读数据流 StreamReader sr = new StreamReader(resStream,System.Text.Encoding.Default); // 读取数据流中的内容 var str = sr.ReadToEnd();//这个就是B页面C的Html的代码 NewsItemModel model = new NewsItemModel(); model.SeName = str; //关闭数据流 resStream.Close(); //释放资源 wc.Dispose(); return View(model); }
View 的代码就更简单了:
@model Nop.Admin.Models.News.NewsItemModel @{ Layout = "";//使这个页面不使用模板 } @Html.Raw(Model.SeName)
看到这里 我想大家也都明白是如何实现的了, Iframe1 引用就引用这个页面就能解决 跨域的问题。
有什么意见 或者疑问 可以联系我 : 545036370@qq.com