原文:利用代理页面解决html iframe跨域访问网站问题

在做项目的时候遇到跨域问题,经过自己的一番摸索终于找到一种解决iframe跨域问题的方案,或许很多人也会遇到这样头疼的问题,希望能尽自己绵薄之力帮助大家。如果不清楚或者有问题的可以留言和私信我,谢谢。

【问题描述】

在项目中由于许多页面都是连接到其他项目的页面。由菜单连接到其他域页面,再在其他域页面上调用本项目的js用iframe显示其他域的页面,这样就会涉及到安全性问题即跨域问题。报错信息如下

浏览器控制台跨域报错信息:Unsafe JavaScript attempt to access frame with URL xxx from frame with URL xxx Domains, protocols and ports must match.

【分析思路】

要想解决问题就必须得还原问题本身,那就是重现问题。对于这个问题我就单独写了两个项目来进行模拟测试,并使用iframe来嵌套调用两个项目的页面,把这两个项目分别放在两个不同端口的tomcat下。由于端口不同所以浏览器就会抛出安全异常即跨域问题。

成功的重现问题后,接下来就是根据错误信息在网上搜寻答案。根据网上给的答案大多数都是设置页面document.domain为同一域,这个方法倒是能解决,但是需要所有页面都这样设置,但在实际项目中往往会有很多页面而无法每个页面都设置,逐放弃之。后来几经琢磨想到了利用代理页面,就好像访问本项目页面一样,再结合之前弄打印页面采用自动创建iframe来加载别的页面(即中间页面/代理页面),结果通过这种方式还真有效。

【具体解决方法】

把site1和site2项目分别放在不同端口的tomcat下运行,访问site1的index.html页面,这是入口页面。在site1的index.html页面中用iframe访问显示site2的index.html页面,再通过操作site2的index.html页面调用site1的index.html页面中的方法excute,要调用此方法就要利用到中间代理页面site1中的iframe.html,这个是一个关键页面,因为所有需要跨域的访问都要通过这个页面来调用site1项目中的代码。这样就形成了自己调用自己的代码也就不会出现跨域了。在这个执行过程中site2的index.html页面中的crossFrame方法起到了关键作用,就是通过它来调用代理页面的。

项目截图

Site1/index.html

Site2/index.html

Site1/iframe.html

访问site1/index.html

运行截图:

参考资料:

什么是跨域

我们经常会在页面上使用ajax请求访问其他服务器的数据,此时,客户端会出现跨域问题.

跨域问题是由于javascript语言安全限制中的同源策略造成的.

简单来说,同源策略是指一段脚本只能读取来自同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合.

例如:

URL 说明 是否允许通信
http://www.a.com/a.js 
http://www.a.com/b.js
同一域名下 允许
http://www.a.com/lab/a.js 
http://www.a.com/script/b.js
同一域名下不同文件夹 允许
http://www.a.com:8000/a.js 
http://www.a.com/b.js
同一域名,不同端口 不允许
http://www.a.com/a.js 
https://www.a.com/b.js
同一域名,不同协议 不允许
http://www.a.com/a.js 
http://70.32.92.74/b.js
域名和域名对应ip 不允许
http://www.a.com/a.js 
http://script.a.com/b.js
主域相同,子域不同 不允许
http://www.a.com/a.js 
http://a.com/b.js
同一域名,不同二级域名(同上) 不允许(cookie这种情况下也不允许访问)
http://www.zuidaima.com/a.js 
http://www.a.com/b.js
不同域名 不允许

利用代理页面解决html iframe跨域访问网站问题相关推荐

  1. iframe 跨越访问_js iframe跨域访问

    1.什么是跨域? 2.前台解决跨域几种方法 2.1 动态创建script 2.2 使用document.domain 2.3使用HTML5新属性postMessage 2.4 利用iframe和loc ...

  2. html的页面怎样直接跨域访问,【HTML】iframe跨域访问问题

    概述 本地同一浏览器访问本地HTML文件和访问服务器端HTML文件,本地Iframe没有自适应高度,而服务器端的Ifrane自适应了高度. 1.问题重现: Chrome 版本 41.0.2272.10 ...

  3. 用P3P header解决IE下iframe跨域访问时候session丢失的问题

    用P3P header解决IE下iframe跨域访问时候session丢失的问题 整合客户的登录时,或者其他一个网站通过iframe时,特别是一个http页面,访问一个https页面时,常常会sess ...

  4. CP=CAO PSA OUR 用P3P header解决iframe跨域访问cookie

    短信模块以iframe方式嵌入系统,系统登录时,短信登录失败,这种情况只在win7下IE出现,win10未出现. 原因:IE禁止iframe跨域访问cookie 解决方案: 在短信登录时,进行如下设置 ...

  5. vb跨域访问ajax,解决AJAX的跨域访问-两种有效示例

    这篇文章主要为大家详细介绍了解决AJAX的跨域访问-两种有效示例,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小玲来看看吧!新的W3C策略实现了HTTP跨域访问,还 ...

  6. Vue Nginx反向代理配置 解决生产环境跨域

    Vue本地代理举例: module.exports = {publicPath: './',devServer: {proxy: {'/api': {target: 'https://movie.do ...

  7. java iframe 跨域,jsp与iframe跨域访问的一个方法

    前提条件: 假设有两个页面 one.html.two.html. one.html 中有js方法 function one(){}: two.html 中有js方法 function two(){}: ...

  8. Jetty Cross Origin Filter解决jQuery Ajax跨域访问的方法

    当使用jQuery Ajax post请求时可能会遇到类似这样的错误提示 XMLHttpRequest cannot load http://xxxxxx. Origin http://xxxxxx ...

  9. 解决Flex/Flash跨域访问出现的安全沙箱问题

    flash里有着著名的安全沙箱机制,我们需要用flash实现跨域访问远程URL时,会遇到下面几种相关的安全沙箱问题: 问题1: Flash/Flex,会涉及到跨域访问URL的安全性问题,最常见的就是出 ...

最新文章

  1. BZOJ-1192-鬼谷子的钱袋
  2. leetCode刷题(使用链表做加法)
  3. flink的分桶策略BucketAssigner与hive的分区的对应关系
  4. 【BZOJ3831】Little Bird,单调队列优化DP
  5. tigervnc远程控制linux,CentOS 6.8 安装TigerVNC 实现 Linux 远程桌面
  6. Kali Linux 秘籍 第二章 定制 Kali Linux
  7. IBM 重磅开源 Power 芯片指令集!国产芯迎来新机遇?
  8. html中的rem做响应式,使用rem制作响应式网站
  9. vmware虚拟机挂载Windows磁盘的两种方法
  10. 如何简单使用阿里巴巴矢量图标库!?
  11. pymysql长时间连接自动断开解决方案
  12. 基于预测分析表法的语法分析程序
  13. DOS命令:chkdsk
  14. 计算机如何切换显卡,怎么设置独显-Nvidia显卡双显卡切换就这么简单
  15. css手册.chm + W3CSchool.chm下载
  16. 官方文档-Linux服务器集群系统(一)
  17. JetBrain 系列软件快捷键集合
  18. 卡尔曼滤波的细致讲解从一维到多维
  19. 在网站中添加微博“一键关注”代码
  20. 水库安全监测自动化系统解决方案

热门文章

  1. 天狮集团李金元大胆决策创业,天狮直销成为中国直销走出去的典范
  2. 有哪些值得收藏的运营思维导图?
  3. 车辆路径问题相关benchmark汇总
  4. 地下水位监测仪 原理
  5. 微信小程序生成海报无法保存到相册
  6. 修改文件md5值的简单方法!
  7. 旋转机械 | 基于ANSYS WB平台的滑动轴承分析工具(一)
  8. 像MyIE一样拥有多窗口(转)
  9. 查看Oracle的redolog
  10. 疯狂Java讲义PDF