一、嵌入iframe页面业务场景

项目是一个物流运营平台的管理系统,系统中对接了第三方的客服系统。因此这里需要在自己的页面中嵌入三方客服聊天的页面(这里对接了智齿)。ps:别问我为什么不自己写一个聊天的功能,问就是不知道。

二、iframe是什么

ifram标签规定了一个内联框架,让我们有可能在当前的HTML文档中嵌入另外一个文档,目前所有的主流浏览器都支持iframe标签,当然为了以防万一你可以在iframe标签中写入提示文本,以提示用户当前使用的浏览器不支持iframe。

<iframe src="http://www.baidu.com">
    IE:你们都看我干吗,我现在也是支持的
</iframe>

说白了就是我们在一个页面中嵌入另外一个页面,一般这个页面是独立的。

三、iframe的应用场景包括

1.沙箱隔离(两个页面js/css互不影响)

2.引入三方内容(如三方(QQ)登录,本人引入了三方客服)

3.网页编辑器,所见即所得(element在线编辑器)

4.在页面中打开excel、pdf等文件

知乎的编辑器使用了 contentEditable,但是video使用了iframe标签
个人不建议在页面中嵌入iframe,除非业务真的需要这样做,两个页面之间的通信是iframe最先要解决的问题。后续需要解决的问题则更多。

四、如何控制和使用iframe

iframe 提供了一些属性供我们控制它:

width:iframe的宽

height:iframe的高

iframe页面的长宽高,页面样式,我们可以根据属性进行控制,同样我们也可以
使用 css 为iframe页面添加 class id 来控制iframe

src:我们嵌入页面的URL

name:iframe的name属性

scrolling:(auto,yes,no,默认auto)页面中的iframe是否显示滚动条。

这个属性可以让我们更好的控制 iframe 的滚动条,但是页面高度大于iframe高度时滚动条是一定会出现的,这时我们设置了 no 或者 yes 页面超出部分将不再显示,所以请根据自己的业务情况进行选择。

五、代码示例


    <iframe
        id="iframeContain"
        name="iframeContain"
        seamless
        scrolling="yes"
        :src="iframeURL"
      >
        您当前的浏览器不支持页面上的功能,请升级您当前的浏览器版本或使用谷歌浏览器访问当前页面
     </iframe>
<style lang='scss' scoped> /** iframe样式 */ #iframeContain{ width: 100%; height: 800px; } </style> 

六、两个页面之间的通信

页面的通信大前提是页面在同一域名下,不同域名下的通信极其困难,甚至window.close()都无法执行。(详情见浏览器同源策略)
页面通信主要有三种 父子、子父、兄弟

1.父子

通过name属性 name = “iframeContain”

父页面

    fun parent(){
    var chilsData = iframeContain.window.child()
    //  chilsData = [a,b,c]
    }

子页面

    var data = [a,b,c]
    fun child(){
    return data
    }