iframe子页面在跨域情况下使用父页面的方法
parent.parent.document.getElementById,应该是可以操作的,我之前有一个子页面操作父级页面iframe高度的例子,跟你这个比较类似吧,因为你c.html是跟a.html同一个域名的,所以c.html应该是可以操作a.html的内容。
首先建立一个父级页面parent.html,代码如图,一个pop函数方法,一个链接到child.html的iframe标签。
iframe子页面调用父页面js函数 子页面调用父页面函数只需要写上window.praent就可以了。
在页面上使用iframe来动态加载页面内容是网页开发中比较常见的方法。在父页面中给定一个不带滚动条的iframe,然后对属性src指定一个可加载的页面,这样当父页面被访问的时候,子页面可以被自动加载。
为解决这个问题,我们把这个组件写成了单独的页面挂到一个域名下,其他项目采用iframe或者webview的方式去加载这个页面,从而实现功能的简单复用。不过这过程中也产生了很多问题,单是跨域就会出现好几次了。
获取父级页面,你只需获取到父级的window就可以做获取数据操作,window.parent即为iframe获取父级页面window的方法。
详解iframe跨域的几种常用方法(小结)
还有一种方式,就是通过降域来实现跨域。即通过设置document.domain的方式,将两个域名的domain设置为一个,如对于a.example.com和b.example.com,可以通过js设置 document.domain = example.com ,实现跨域。
具体的做法是可以在http://和http://两个文件中分别加上 document.domain = a.com然后通过a.html文件中创建一个iframe,去控制iframe的contentDocument,这样两个js文件之间就可以 “交互”了。
但实际情况,浏览器出于安全考虑,是不允许访问除iframe src=url / 中的url的其他不同域名的数据。我们可以借助 Nginx (需要与iframe请求的域名所在的Nginx), 配置一个代理地址,进行中间跳转,即可解决跨域问题。
在页面上使用iframe来动态加载页面内容是网页开发中比较常见的方法。在父页面中给定一个不带滚动条的iframe,然后对属性src指定一个可加载的页面,这样当父页面被访问的时候,子页面可以被自动加载。
iframe页面间通信
iframe跨域,但又需要进行通信,决定使用window.postMessage进行通信。以下是使用中遇到的一些注意点。
为什么要用iframe呢,既然都是同一个站的面页,那就不要用iframe了,本来这个就不好操作。用AJAX效率会高很多,原本两个iframe的通讯,直接变成一个面页的,简单直接。
项目中,iframe内部的子页面要使用父页面的方法,如果不跨域,那么直接通过parent.func()就可以直接调用了。但如果子页面和父页面跨域了,就需要用html5的postMessage方法来进行通信和传输数据,间接性的在父页面调用方法。
在同源策略情况下,iframe页面间通信,但这要求你对两个网站有控制权,需要在两个页面写js发送消息,接受消息,这种意义不大。
利用iframe引入需要认证的跨域页面
违反了同源策略就会出现跨域问题,主要表现为以下三方面: 无法读取cookie、localStorage、indexDB DOM无法获得 ajax请求无法发送场景最近在做一个需求,需要用iframe引入一个别人封装好的类似视频播放器的东西。
需要手动识别DOM内标签仿照浏览器保存网页一样抓取吗之前我试验了一下,浏览器内保存后的网页,直接用iframe显示的时候好像也是有一些问题。直接用js实现不了的吧,这跨域问题没法解决啊,不过感觉可以使用puppeteer来实现。
但实际情况,浏览器出于安全考虑,是不允许访问除iframe src=url / 中的url的其他不同域名的数据。我们可以借助 Nginx (需要与iframe请求的域名所在的Nginx), 配置一个代理地址,进行中间跳转,即可解决跨域问题。