导航:首页 > 编程语言 > iframe跨域调用js对象

iframe跨域调用js对象

发布时间:2024-11-23 14:59:59

① 如何用javascript 跨域获取iframe子页面的元素信息

跨域的话想用父页面的js获取iframe里的元素是不可能的。
用chrome扩展程序的话是可以的。

② js如何操作iframe的跨域问题

A域名下的页面index.htm中内嵌了一个iframe页面,iframe内引用的是B域名的sub-index.htm页面,但是为了避免出
现在index.htm页面中出现滚动条,需要明确知道sub-index.htm页面的高度和宽度,可是sub-index.htm的页面内容是不可控的,可能会根据不同用户页面大小会不一样;问题就是如何把sub-index.htm页面的高度和宽度传递给index.htm页面?

具体解决:
1、在index.htm页面中声明一个js函数process(height, width);用来实现设置页面内iframe的高度和宽度;
2、
在sub-index.htm页面中再内嵌一个隐藏的iframe,iframe的src指向A域名下的页面ex.htm?height=xx&
width=yy,该页面没有任何内容,只是用来传递sub-index.htm页面加载完之后的宽度和高度这两个数据的,页面内js拿到request
中的参数之后直接调用parent.parent.process(height, width);完成对父页面宽度和高度的设置;
如图:

③ 主页面怎么调用iframe里的javascript方法

如果是同一个域,iframe可以调用父窗口的js方法。如果
是父窗口调用子窗口内部的方法。不论跨不跨域,都不能调用。
解决办法:H5提供的消息机制。支持跨域。

在iframe窗口的js代码中,监听事件:
window.onmessage=function(e){
//e.data--接收到的字符串。
//e.source---发送窗口所在的域。
//e.orgin--发送窗口的代理对象。
}
在主页面窗口中,发送消息。
window.postMessage("字符串","域");
//其中的域是指iframe所在网站的域名。如果为*表示不校验校验域名。

④ javascript 能否调用到iframe标签包含页面中的函数

可以的。只要两个页面有一定的关系,无论是通过iframe,还是frameset,甚至是window.open,超链接等等方式,都可以让两个页面之间的js互相调用。注意,是互相调用,也就是说,两者谁都有办法调用另一个的js代码。


当然有前提,前提就是两个页面都是你自己的页面,是在同一个域下面的,否则牵扯跨域问题,就比较麻烦了。


互相调用的关键是获取另一方的window对象。通常页面中window对象就是window,直接使用。但通过某种关系的另一个页面的window就需要通过别的方式获取了。以iframe为例,跨域通过普通节点获取的方式得到iframe节点,比如iframe节点id为ifr,则:

varifr=document.getElementById('ifr');
varwin=ifr.window||ifr.contentWindow;//考虑兼容性问题

这里获取到的win,就对应普通页面的window。要操作这个框架页面,就可以通过这个win进行操作了。比如获取框架页面的文档对象win.document,到了这一步,剩下的就和普通页面没有区别了。


要获取通过window.open打开的页面的window引用就更简单了:

varwin=window.open(url);//这个函数还有其它知识点,请自行搜索

而要在window.open打开的页面中获取父页面的window,也就是打开该页面的页面的window,也很简单:

varwin=window.opener;//表示打开本window的那个页面的window


获取到另一个页面的window引用后,实际上另一个页面的很多控制权就拿到了。你可以通过获取到的window随意修改另一个页面了。比如要调用iframe中的a函数,就可以这样:

varifr=document.getElementById('ifr');
varwin=ifr.window||ifr.contentWindow;
win.a();//调用iframe中的a函数

⑤ iframe通信和跨域通信总结

讨论小车实现两个页面通信,使用iframe标签。同域下,父页面通过FrameName.window.childMethod()调用子页面方法,子页面响应parent.window.parentMethod()。获取DOM元素,先确保iframe加载完成,使用onload事件或document.readyState=="complete"判断。跨域通信则利用location对象的hash值传递数据。在父页面设置src后加data字符串,子页面通过监听location.href变化,获取数据进行处理。子页面向父页面传递数据,借助代理iframe,它和父页面保持同域,利用同域通信方式,通过window.top或window.parent.parent获取数据。实现细节参考js之iframe子页面与父页面通信。

⑥ javascript 跨域调用js文件问题.....

三种方法实现js跨域访问

1.基于iframe实现跨域

基于iframe实现的跨域要求两个域具有aa.xx.com,bb.xx.com这种特点,也就是两个页面必须属于一个基础域(例如都是xxx.com,或是xxx.com.cn),使用同一协议(例如都是 http)和同一端口(例如都是80),这样在两个页面中同时添加document.domain,就可以实现父页面调用子页面的函数,代码如下:

页面一代码:
<html>
<head>
<script>
document.domain="xx.com";
functionaa(){
alert("p");
}
</script>
</head>
<body>
<iframesrc="http://localhost:8080/cmsui/2.html"id="i">

</iframe>
<script>
document.getelementbyid('i').oncg=function(){
vard=document.getelementbyid('i').contentwindow;
d.a();

};
</script>
</body>
</html>
页面二代码:
<html>
<head>
<script>
document.domain="xx.com";
functiona(){
alert("c");
}
</script>
</head>
<body>
</body>
</html>

这时候父页面就可以调用子页面的a函数,实现js跨域访问


2.基于script标签实现跨域

script标签本身就可以访问其它域的资源,不受浏览器同源策略的限制,可以通过在页面动态创建script标签,代码如下

varscript=document.createElement('script');
script.src="http://aa.xx.com/js/*.js";
document.body.appendChild(script);

这样通过动态创建script标签就可以加载其它域的js文件,然后通过本页面就可以调用加载后js文件的函数,这样做的缺陷就是不能加载其它域的文档,只能是js文件,jsonp便是通过这种方式实现的,jsonp通过向其它域传入一个callback参数,通过其他域的后台将callback参数值和json串包装成javascript函数返回,因为是通过script标签发出的请求,浏览器会将返回来的字符串按照javascript进行解析执行,实现了域与域之间的数据传输。

jquery中对jsonp的支持也是基于此方案


3.后台代理方式


这种方式可以解决所有跨域问题,也就是将后台作为代理,每次对其它域的请求转交给本域的后台,本域的后台通过模拟http请求去访问其它域,再将返回的结果返回给前台,这样做的好处是,无论访问的是文档,还是js文件都可以实现跨域

阅读全文

与iframe跨域调用js对象相关的资料

热点内容
在哪个app看各个博导招生信息 浏览:611
hp280prog2mt装win10 浏览:733
linux安装vnc包 浏览:740
哪个网站房子挂牌价靠谱 浏览:16
迷你编程迷小酷碎片获取后怎么激活 浏览:286
微信网页版登陆地址 浏览:628
王菲天空所有版本 浏览:489
管理某个设备需要哪些文件 浏览:986
怎样去除word里的分隔符 浏览:489
美林数据产品开发部如何 浏览:313
zendframework查看版本 浏览:140
qq小冰能干啥 浏览:242
大气手机网站 浏览:734
苹果电脑必备办公软件 浏览:786
pythonjson不转义 浏览:994
工业园区做数控编程怎么样 浏览:582
在vb编程语言中char是什么意思 浏览:90
文件夹选项查看 浏览:802
网络好便宜的手机 浏览:916
excel保存vba代码 浏览:878

友情链接