假设有A: 127.0.0.1:8080
B: 192.168.0.1:7001
两个服务器,A的IFrame嵌入B的页面,
由于两个页面不在同一个域和端口下,会报错:Protocols, domains, and ports must match.
怎么实现A对B页面的dom元素的操作呢?
1.实现B页面的扩展
在A服务器下建立一个代理页面,用于B页面dom对象的获取,简称 AProxy.html
这样会形成A和B不同域
A和Aproxy同域
A的Iframe 嵌入B
B的iframe嵌入Aproxy
只需要通过Aproxy对其父级B进行dom读取,虽然不属于同一域可以进行doucment.domain的设置
然后通过Aproxy对其A(parent.parent )进行dom设置,以便可以回调
代码如下:
A页面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <title>调用demo</title> <meta name="google" value="notranslate" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script> document.domain = "192.168.0.1:7001"; var swfObj = null; function setSwfObj(obj){ //这里是代理页面对B页面的dom回调 if(null == swfObj){ swfObj = obj; } return swfObj; } function TESTDrawPoints1(){ var obj = swfObj.GetExtent(); alert(obj.xmin+","+obj.ymin); //getSwfObject().DrawPoints("点图层","001","116.46,40","circle",20,"ff0000",false,"测试点",true,true,true,"","pointmouseClick",""); } </script> </head> <body> <input type="button" value="画单个点" onclick="TESTDrawPoints1()"/> <div style="overflow:auto;"> <iframe id="gframe" name="gframe" src="http://127.0.0.1:7001/B.jsp" width="99%" height="500" > </div> </body> </html>
AProxy.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <title>GIS调用demo</title> <meta name="google" value="notranslate" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script> window.onload = function(){ document.domain = "192.168.0.1:7001"; var ssw = window.parent; var swfObj = window.parent.document.getElementById("index");//获取swfObj对象 parent.parent.setSwfObj(swfObj);//设置dom对象,A页面有回调接受 } </script> </head> <body> </body> </html>
B 页面:在其body之前加入
<iframe id="myfarme" src="###" style="display: none;"></iframe> //一定display 为none 这样不会占有空间 <script> window.onload = function(){ document.domain = "192.168.0.1:7001";//这个必须设置,设置统一域名 document.getElementById('myfarme').src="http://127.0.0.1:8080/Aproxy.html"; } </script>
相关推荐
iframe跨域访问也被研究的很透了。 一般分两种情况: 一、 是同主域下面,不同子域之间的跨域; 同主域,不同子域跨域,设置相同的document.domian就可以解决; 父页访问子页,可以document.getElementById(“myframe...
1、为ScriptManager添加脚本引用,不从ScriptResource.axd中加载MicrosoftAjax.js脚本,而是直接加载 <asp:ScriptReference Name="MicrosoftAjax.js" ScriptMode="auto" Path="~/ScriptLibrary/System.Web....
javascript跨域访问是web开发者经常遇到的问题,什么是跨域,一个域上加载的脚本获取或操作另一个域上的文档属性,下面将列出三种实现javascript跨域方法: 1.基于iframe实现跨域 基于iframe实现的跨域要求两个域...
由于代理页与目标页同域, 所以代理页可以获取并操作目标页的document对象. 前提条件 需要将proxy.html放到与内嵌的iframe页同域的服务下, 并且可以被访问到. 使用 支持2种调用方式: 使用 postMessage 和 URL params....
方案:在服务器端创建一个静态的代理页面,在客户端用iframe调用这个代理,然后通过iframe的document.getElementById(“proxy”).contentWindow对象来请求ajax。 服务器端的代理页面: 代码如下: <!DOCTYPE ...
可以将book.aa.com用iframe添加到 www.aa.com的某个页面下,在www.aa.com和iframe里面都加上document.domain = "aa.com",这样就可以统一域了,可以实现跨域访问。就和平时同一个域中镶嵌iframe一样,直接调用里面的...
本文实例讲述了JavaScript同源策略和跨域访问。分享给大家供大家参考,具体如下: 1. 什么是同源策略 理解跨域首先必须要了解同源策略。同源策略是浏览器上为安全性考虑实施的非常重要的安全策略。 何谓同源: URL由...
本域和子域的交互,可以通过iframe设置两个域名document.domain = "s135.com",实现统一s135.com域下的跨域访问。 本域和其他域的交互,可以通过iframe、代理、JS创建动态脚本等几种方法来实现,这里有篇文章对...
javascript跨域访问是web开发者经常遇到的问题,什么是跨域,一个域上加载的脚本获取或操作另一个域上的文档属性,下面将列出三种实现javascript跨域方法: 1.基于iframe实现跨域 基于iframe实现的跨域要求两个域...
1. 获得iframe的window对象存在跨域访问限制。 chrome:iframeElement. contentWindowfirefox: iframeElement.contentWindowie6:iframeElement.contentWindow 文章Iframes, onload, and document.domain中说“he ...
在网上找了未测试解决办法 经查资料发现 ,默认情况下,浏览器是禁止 脚本跨域访问的,除非这些域之间有必须的访问信任关系。 找到问题就好办了,可以降低浏览器的安全级别,但这样对用户无疑是不利的。 所以我们...
理解跨域首先必须要了解同源策略。同源策略是浏览器上为安全性考虑实施的非常重要的安全策略。 何谓同源: URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则表示他们同源。 同源...
48、JS解决COOKIE跨域访问的问题之方法一 323 49、JS禁止复制网页代码 324 50、JS 禁止剪切、复制、粘贴的文本框代码 326 51、如何禁止火狐浏览器的右键功能 327 52、IE地址栏前换成自己的图标 327 53、关闭输入法 ...