位置: 编程技术 - 正文

JS跨域问题详解(js跨域解决方案)

编辑:rootadmin

推荐整理分享JS跨域问题详解(js跨域解决方案),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js解决跨域的三种方法,js跨域解决方案,js解决跨域的几种办法,js解决跨域的几种办法,js解决跨域的三种方法,js跨域的几种方法,js跨域的几种方法,js解决跨域的三种方法,内容如对您有帮助,希望把文章链接给更多的朋友!

JavaScript是一种在Web开发中经常使用的前端动态脚本技术。在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容。

  JavaScript这个安全策略在进行多iframe或多窗口编程、以及Ajax编程时显得尤为重要。根据这个策略,在baidu.com下的页面中包含的JavaScript代码,不能访问在google.com域名下的页面内容;甚至不同的子域名之间的页面也不能通过JavaScript代码互相访问。对于Ajax的影响在于,通过XMLHttpRequest实现的Ajax请求,不能向不同的域提交请求,例如,在abc.example.com下的页面,不能向def.example.com提交Ajax请求,等等。

  然而,当进行一些比较深入的前端编程的时候,不可避免地需要进行跨域操作,这时候“同源策略”就显得过于苛刻。本文就这个问题,概括了跨域所需要的一些技术。

  下面我们分两种情况讨论跨域技术:首先讨论不同子域的跨域技术,然后讨论完全不同域的跨域技术。

(一)不同子域的跨域技术。  我们分两个问题来分别讨论:第一个问题是如何跨不同子域进行JavaScript调用;第二个问题是如何向不同子域提交Ajax请求。

先来解决第一个问题,假设example.com域下有两个不同子域:abc.example.com和def.example.com。现在假设在def.example.com下面有一个页面,里面定义了一个JavaScript函数:

  我们想在abc.example.com下的某个页面里调用上面的函数。再假设我们要讨论的abc.example.com下面的这个页面是以iframe形式嵌入在def.example.com下面那个页面里的,这样我们可能试图在iframe里做如下调用:

  好,我们注意到,这个调用是被前面讲到的“同源策略”所禁止的,JavaScript引擎会直接抛出一个异常。

  为了实现上述调用,我们可以通过修改两个页面的domain属性的方法做到。例如,我们可以将上面在abc.example.com和def.example.com下的两个页面的顶端都加上如下的JavaScript代码片段:

  这样,两个页面就变为同域了,前面的调用也可以正常执行了。

  这里需要注意的一点是,一个页面的document.domain属性只能设置成一个更顶级的域名(除了一级域名),但不能设置成比当前域名更深层的子域名。例如,abc.example.com的页面只能将它的domain设置成example.com,不能设置成sub.abc.example.com,当然也不能设置成一级域名com。

JS跨域问题详解(js跨域解决方案)

  上面的例子讨论的是两个页面属于iframe嵌套关系的情况,当两个页面是打开与被打开的关系时,原理也完全一样。

  下面我们来解决第二个问题:如何向不同子域提交Ajax请求。

  通常情况下,我们会用与下面类似的代码来创建一个XMLHttpRequest对象:

  上面的代码中引用ActiveXObject,是为了兼容IE6系列浏览器。每次我们调用newRequest函数,就获得了一个刚刚创建的Ajax对象,然后用这个Ajax对象来发送HTTP请求。例如,下面的代码向abc.example.com发送了一个GET请求:

  假设上面的代码包含在一个abc.example.com域名下的页面里,则这个GET请求可以正常发送成功,没有任何问题。然而,如果现在要向def.example.com发送请求,则出现跨域问题,JavaScript引擎抛出异常。

  解决的办法是,在def.example.com域下放置一个跨域文件,假设叫crossdomain.html;然后将前面的newRequest函数的定义移到这个跨域文件中;最后像之前修改document.domain值的做法一样,在crossdomain.html文件和abc.example.com域下调用Ajax的页面顶端,都加上:

  这时abc.example.com域下的页面和跨域文件crossdomain.html都在同一个域(example.com)下,我们可以在abc.example.com域下的页面中去调用crossdomain.html中的newRequest函数:

  这样获得的request对象,就可以向  如果顶级域名都不相同,例如example1.com和example2.com之间想通过JavaScript在前端通信,则所需要的技术更复杂些。

  在讲解不同域的跨域技术之前,我们首先明确一点,下面要讲的技术也同样适用于前面跨不同子域的情况,因为跨不同子域只是跨域问题的一个特例。当然,在恰当的情况下使用恰当的技术,能够保证更优的效率和更高的稳定性。

  简言之,根据不同的跨域需求,跨域技术可以归为下面几类:

1、JSONP跨域GET请求2、通过iframe实现跨域3、flash跨域HTTP请求4、window.postMessage

本文先到这里,后续我们再详细介绍上面提到的4种跨域技术,稍后就奉上!

javascript几个易错点记录 1.清空input标签值得时候,不能用html("")清空,要用val("")清空2.事件如果绑定多次,触发事件后,回调函数也会执行多次,所有最好把绑定事件的函数单独写,或

js获取浏览器基本信息大全 网页可见区域宽:document.body.clientWidth网页可见区域高:document.body.clientHeight网页可见区域宽:document.body.offsetWidth(包括边线的宽)网页可见区域高:document

javascript中数组array及string的方法总结 一、array的方法总结会更改原来的的数组push、unshift方法,返回length。增加值得就返回length,其他返回该元素pop,shift返回该元素reverse返回该元素splice(start,d

标签: js跨域解决方案

本文链接地址:https://www.jiuchutong.com/biancheng/384813.html 转载请保留说明!

上一篇:js 加密压缩出现bug解决方案(js文件被加密)

下一篇:javascript几个易错点记录(javascript里的yield)

  • 管理费用不计入成本吗?
  • 个人所得税的账务处理
  • 差额纳税是什么税
  • 机票的抵扣进项怎么抵扣
  • 会计科目已受控于应收应付系统
  • 公司收到红字发票怎么开
  • 春节商家促销文案
  • 租车费属于办公费吗
  • 应收账款资产减值损失转回和核销的区别
  • 税控设备全额抵扣政策
  • 快递快件丢失
  • 企业会主动对税吗
  • 中国公司投资海外有什么限制
  • 职工教育经费的扣除标准是什么
  • 小规模纳税人按什么标准纳税
  • 借款给其他公司的会计分录怎么写
  • 营业外收入可以在借方吗
  • 保洁属于劳务报酬吗
  • 当月增加的固定资产
  • 员工的罚款计入什么科目
  • 在windows中桌面是
  • 预收账款何时结转
  • 发票已经认证,发现错误了要怎么处理
  • php 实例
  • php变量格式说法错误的是
  • 进口付汇流程
  • 抵债资产的账务处理
  • 已用短信息服务发送信息,对方能收到吗
  • 【机器学习】前置知识:矩阵的表示与定义 | Identity 身份矩阵 | 逆矩阵和转置 | 标量乘法
  • 员工工资属于什么会计科目
  • 库管和车间工人哪个好
  • 股东之间股权转让流程
  • 银行代发工资流程
  • 固定资产是怎么管理的
  • 计提福利费的会计分录
  • 出口样品视同销售如何做会计处理?
  • 会计调整以前年度遗留问题查不出来说明怎么写
  • 汽车折旧年限与折旧率
  • 小规模纳税人系统查询
  • 电子发票显示错误信息是什么原因
  • 技术服务费怎么做分录
  • 金蝶制造费用明细如何查询
  • 计提税金及附加的金额如何算
  • 职工薪酬包括哪四项内容
  • mysql深度解析
  • 触发器中instead of
  • xp系统怎么创建本地连接2
  • 硬盘安装操作系统出现,两个操作系统怎么选择
  • tvt_reg_monitor_svc.exe进程是什么
  • window组件在哪里
  • Win10 Mobile RS2预览版14951升级遭遇卡在0%的解决办法
  • xp系统的本地连接
  • ubuntu fsl
  • linux获取主目录的命令
  • 苹果电脑打不开txt
  • rrpcsb.exe - rrpcsb是什么进程 有什么用
  • movie是什么文件
  • linux常用命令chmod
  • 注册表winlogon
  • win10专业版装不上m1136驱动
  • window10分屏显示
  • 如何打开win7
  • linux从一个命令获取数据到另一个命令
  • jquery validate.js表单验证入门实例(附源码)
  • unity3D游戏开发
  • Node.js中的核心模块包括哪些内容?
  • python复制文件内容
  • python 转义字符处理
  • react.development.js
  • uleb128、sleb128和uleb128p1编码格式介绍
  • Unity 使用WWW类同步加载资源
  • 利用ctypes提高Python的执行速度
  • android 圆形图片
  • 企业所得税计算器在线计算
  • 附加税申报表样本
  • 江苏国税电子税务局打印机设置
  • 河南省教育厅纪检组举报电话
  • 济南车辆购置税完税证明电子版
  • 越南进口废塑料新政策
  • 个人养老金没有开立资金账户
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设