最近接到一个功能拓展需求,新需求中所引用的数据接口却只能提供XML格式……无奈自身功力有限,没有想到JS方面理想的解决方案,只好寻求AS工程师的帮忙,经过近2天的联调,最终解决了各浏览下的跨域访问。

下面记录demo版代码:

父页面HTML

<iframeid="hiddenIframe"style="width:0px; height:0px; border:0px none; *width:1px; *height:0px; overflow:hidden;"></iframe>
<buttonvalue="获取数据"onclick="getData()"></button>
<!--为什么没有直接display:none;或者visibility: hidden;?  【稍后解释:标记】-->

父页面JS:

document.domain = "xxx.com";functiongetData(data) {if (data == "" || data == undefined || data == null) {sendData("a=1&b=2");        //参数格式任意,相当于你get请求时发的参数
}else{alert("获取的数据:" +data)} }functionsendData(param) {var childWindow = document.getElementById('testIframe').contentWindow;childWindow.sendData(param);//驱动作用,驱动隐藏域内的方法去调用AS中获取XML的API方法
}functionchange() {document.getElementById("testIframe").src = "xx.html"; //隐藏域URL
}

子页面JS

document.domain = "xxx.com";functionsendData(paramFromParent) {var severUrl = 'xxx.com';//此处对paramFromParent进行处理  获得完整的方位xxx.xml的URL//然后调用AS的URLLoader方法去获取URL下的数据//获取成功后调用下面的方法驱动父页面中的getData方法
}functiongetData(backData) {window.parent.getData(backData);
}

标记:没有用display或者visibility是因为:在IE浏览器下,当你的iframe元素设置样式为此两点时候,框架内的JS不进行加载,也就无法进行通信了......

方便理解,上图说话

程序流程

  1. 加载JS,声明父页面window下的sendData和getData方法
  2. 加载iframe
  3. iframe中运行其中的AS代码
  4. AS跨域获取xml文件解析处理
  5. 调用window.parent.getData以驱动父页面JS,传递数据解析处理好的数据

OK,成功跨域...下班...~

转载于:https://www.cnblogs.com/ccto/archive/2013/03/21/2974022.html

【JS跨域取XML】之——借助AS的URLLoader相关推荐

  1. js跨域请求方式 ---- JSONP原理解析

    这篇文章主要介绍了js跨域请求的5中解决方式的相关资料,需要的朋友可以参考下 跨域请求数据解决方案主要有如下解决方法: 1 2 3 4 5 JSONP方式 表单POST方式 服务器代理 Html5的X ...

  2. 5种处理js跨域问题方法汇总(转载)

    1.JSONP跨域GET请求 ajax请求,dataType为jsonp.这种形式需要请求在服务端调整为返回callback([json-object])的形式.如果服务端返回的是普通json对象.那 ...

  3. 转载:flash 跨域 crossdomain.xml

    转载自http://hi.baidu.com/bozz_/item/e8b1c7c4ca31317489ad9e91 flash 跨域 crossdomain.xml 一.概述 位于www.cross ...

  4. JS跨域请求解决方案-CORS

    文章目录 JS跨域请求解决方案-CORS 1.JS跨域请求 测试JavaScript的跨域请求(失败) 2. 跨域解决方案CORS 普通实现方法 springMVC的跨域请求注解 3.分布式Id解决方 ...

  5. 常见js跨域解决方案

    以下为几种常见js跨域解决方案: ajax跨域请求 一.使用jsonp方式实现跨域请求 $.ajax({async: false, type:"POST",dataType: 'j ...

  6. chrome浏览器的跨域设置 Google Chrome浏览器下开启禁用缓存和js跨域限制--disable-web-security...

    chrome用户默认路径 Win7:C:\Users\[用户名]\AppData\Local\Google\Chrome\User Data\ XP:C:\Documents and Settings ...

  7. Atitit.js跨域解决方案attilax大总结 后台java php c#.net的CORS支持

    Atitit.js跨域解决方案attilax大总结 后台java php c#.net的CORS支持 1.设置 document.domain为一致  推荐1 2.Apache 反向代理 推荐1 3. ...

  8. window.opener方法的使用 js跨域

    2019独角兽企业重金招聘Python工程师标准>>> 最近公司网站登陆加入了第三方登陆.可以用QQ直接登陆到我们网站,在login页面A中点QQ登陆时,调用了一个window.op ...

  9. js跨域访问,No 'Access-Control-Allow-Origin' header is present on the requested resource

    js跨域访问提示错误:XMLHttpRequest cannot load http://...... No 'Access-Control-Allow-Origin' header is prese ...

  10. 解决js跨域调用WebApi的问题

    解决js跨域调用WebApi的问题 参考文章: (1)解决js跨域调用WebApi的问题 (2)https://www.cnblogs.com/qubernet/p/6396295.html 备忘一下 ...

最新文章

  1. [SHOI2007]园丁的烦恼
  2. 吃自助餐怎么样一个顺序吃法才合算?
  3. linux中断函数中有锁,Linux下fcntl实现建议锁和强制锁
  4. html 超链接打开Excel,计算机打开Excel超链接时提示的解决方案
  5. Nginx负载均衡实现之用户手动选择与DNS轮询
  6. 元素加了position:absolute则该元素的text-align:center居中失效的解决办法
  7. Taglist:Exuberant ctags.......
  8. 详细叙述ajax的详情,ajax的配置详情、ajax的调用解释、ajax的中文乱码和ajax的表单提交(内有实例)...
  9. 容器已成运维必备能力,你知道它是如何出现的吗?
  10. @[TOC](0x01131A81 处(位于 Project2.exe 中)引发的异常: 0xC0000005: 读取位置 0x00320000 时发生访问冲突。
  11. WIN10合并磁盘扩展区是灰色的
  12. 谷歌浏览器打开普通用户_谷歌浏览器为啥打开之后会是其他的浏览器的解决步骤...
  13. 如何在知网下载硕士、博士论文PDF?
  14. 合成大西瓜(西瓜雨版)及改版思路(保姆式教程)
  15. 简述:静态工作点(Q点),直流负载线,交流负载线
  16. 知无不言 容芳志:Objective-C地位下滑是必然
  17. 思维题:12个硬币中有1个假币,假币的重量与真币不同,如何用天平最多称量3次找出假币?
  18. 朱清时的10本推荐书
  19. Win10系统ie浏览器打不开网页的2种解决方法
  20. SIMCOM A7670 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程

热门文章

  1. 安卓 卡顿 APP
  2. ThreadLocal总结(jdk1.8源码)
  3. BZOJ 3744: Gty的妹子序列 [分块]
  4. AC日记——丢瓶盖 洛谷 P1316
  5. 百度地图之添加控件——比例尺、缩略图、平移缩放
  6. NHibernate版本不一致问题
  7. net_sf_interfacecpp项目诞生宣言
  8. 利用 Google Chart API 生成二维码大小不一致
  9. jsp中的session和上下文
  10. [转]Oracle - 数据库的实例、表空间、用户、表之间关系