一、vue中的iframe传值
在vue的框架中,如果需要把一个页面嵌套到另一个页面中,可以使用iframe标签。一般情况下,如果需要把一些数据从子页面传到父页面,可以使用iframe的contentWindow属性,然后在子页面中通过postMessage函数向父页面发送消息,从而实现数据传递。
// 父页面<iframe src="child.html" id="frame" width="100%" height="600" frameborder="0"></iframe> <script> window.addEventListener('message', function (event) { console.log(event.data) }, false); var iframe = document.getElementById("frame"); iframe.contentWindow.postMessage("hello world", "*"); </script>
// 子页面<script> window.addEventListener('message', function (event) { console.log(event.data) }, false); window.parent.postMessage("hello world", "*"); </script>
在父页面中,可以通过添加监听函数,监听子页面发来的消息,然后进行相应的处理。同样,在子页面中也可以添加监听函数,监听父页面发来的消息。
二、iframe传值的依赖
在使用iframe传值的过程中,可能会涉及到一些依赖。常用的依赖包括postMessage、easyXDM、window.name、hashchange等。
其中,postMessage是比较常用的一种依赖方式,在上述vue中已经有所涉及。而easyXDM则是一个更为高级的跨域解决方案,它支持所有现代浏览器,并且支持IE6+。
而window.name则是一种比较特殊的方式,它可以通过在父页面中设置window.name的值,然后在子页面中获取这个值,来实现数据传递。而hashchange则是通过监听URL的hash部分的变化来实现数据传递。
三、iframe传值到父页面
当需要在iframe中传值到父页面中时,可以使用postMessage函数。具体实现可以参照上方vue中的例子。在父页面中,可以监听子页面发来的消息,并进行相应的处理。
在一些特殊情况下,可能需要在iframe中传递一个对象,这时可以采用JSON.stringify函数和JSON.parse函数来完成数据的序列化和反序列化。
// 父页面window.addEventListener('message', function (event) { console.log(event.data) }, false);
// 子页面window.parent.postMessage(JSON.stringify({name: '小明', age: 18}), '*');
四、iframe传值给父页面
当需要在父页面中获取iframe中的值时,可以使用contentWindow属性来获取iframe的window对象,从而访问iframe中的数据。
<iframe src="child.html" id="frame" width="100%" height="600" frameborder="0"></iframe>
<script>
var iframe = document.getElementById('frame');
console.log(iframe.contentWindow.document.body.innerHTML);
</script>
以上代码中,通过获取iframe的window对象,进而获取子页面中的body内的HTML文本。同样,也可以获取其他页面元素的值,并进行相应的处理。需要注意的是,由于跨域的限制,有些情况下获取iframe中的值可能会受到限制。
五、layui中的iframe传值
在layui的框架中,可以使用iframe标签将一个页面嵌入到主页面中。在iframe页面中,可以通过父页面中的layui.admin.popup.qxuiframe函数向父页面发送消息。
// 父页面layui.use(['admin'], function(){ var admin = layui.admin; admin.popup.qxuiframe({ id: 'iframe', area: ['800px', '550px'], url: 'child.html' }); });
// 子页面parent.layui.admin.events.iframe('hello', 'world');
在父页面中,通过引入layui库之后,可以获取到admin对象,并使用它里面的popup.qxuiframe函数来打开一个iframe弹窗。
而在子页面中,则需要先获取到父页面的window对象,再通过它里面的layui.admin.events.iframe函数来向父页面发送消息。消息中可以包括任何需要传递的数据。
六、iframe怎么相互传递参数
在嵌套的iframe页面中,如果需要相互传递参数,可以使用postMessage函数。具体实现方式与vue中类似,不再赘述。
如果iframe页面之间需要建立链接,可以通过设置URL参数来完成。例如,在链接中添加“#”后,可以在URL中添加一些参数来完成数据传递。
<iframe src="child.html#name=小明&age=18" id="frame" width="100%" height="600" frameborder="0"></iframe>
在子页面中,可以通过访问location.hash来获取父页面传递的数据。
console.log(location.hash.substring(1)); // 输出 "name=小明&age=18"
七、iframe之间的相互传值
在两个iframe页面之间实现数据传递时,一般需要在父页面中进行协调。父页面可以在监听到一个iframe发送消息之后,再转发这个消息给另一个iframe。实现的具体实现方式与vue中大致相同,不再赘述。
需要注意的是,在实现跨域的iframe传值时,需要考虑到安全性问题。因此,应该采用安全性较高的postMessage函数作为主要的传值方式,避免出现安全漏洞。