在vue中实现嵌套页面(iframe)

在vue中实现嵌套页面(iframe)需要进行以下步骤:

在vue中实现嵌套页面(iframe)需要进行以下步骤:

步骤一:安装依赖

使用vue-cli等工具创建一个vue项目后,在项目根目录下执行以下命令,安装vue-iframe包

npm install --save vue-iframe

步骤二:注册组件

打开项目的main.js,注册全局组件

import Vue from 'vue'
import vueIframe from 'vue-iframe';

Vue.component('vue-iframe', vueIframe);

步骤三:使用组件

将组件添加到需要嵌套iframe的页面中

<template>
  <div>
    <vue-iframe src="http://www.baidu.com" 
                width="100%"
                height="600px">
    </vue-iframe>
  </div>
</template>

以上代码将会在当前页面中嵌入百度网站的页内内容。

示例一:嵌套局部页面

当我们需要在主页面中嵌套其他页面时,可以使用vue-iframe组件来实现,示例代码如下:

<template>
  <div>
    <h1>主页面</h1>
    <ul>
      <li @click="loadPage('http://localhost:8080/login')">登录页面</li>
      <li @click="loadPage('http://localhost:8080/register')">注册页面</li>
    </ul>
    <vue-iframe ref="iframe"
                :src="src"
                :width="width"
                :height="height"
                @loaded="onIframeLoaded">
    </vue-iframe>
  </div>
</template>

<script>
export default {
  data: () => ({
    src: '',
    width: '70%',
    height: '800px'
  }),

  methods: {
    loadPage: function(url) {
      this.src = url;
    },

    onIframeLoaded: function() {
      const iframe = this.$refs.iframe.$el;
      const iframeContent = iframe.contentDocument.body;
      const app = iframeContent.querySelector('#app');
      if(app) {
        app.style.margin = '0';
      }
    }
  }
}
</script>

以上代码,我们在主页面中通过点击按钮的方式,加载不同的页面到iframe组件中,并在页面加载完成后,修改子页面的样式,去除margin等多余样式,实现了一个简单的嵌套页面。

示例二:嵌套第三方页面

我们也可以在主页面中嵌套第三方网站的内容,但需要做一些特殊处理。

<template>
  <div>
    <h1>首页</h1>
    <p>以下是百度搜索的结果:</p>
    <vue-iframe class="baidu-iframe"
                src="https://www.baidu.com/s?word=vue"
                :height="autolayerHeight?"auto" : autolayerHeight='() => { return this.autolayerHeight}' :id="'baidu'" 
                :scrolling="'no'"
                @onIframeLoad="onIframeLoad('https://www.baidu.com')">
    </vue-iframe>
  </div>
</template>

<script>
export default {
  data: function() {
    return {
        baiduShow: true,
        autolayerHeight: 0
    }
  },
  methods: {
    onIframeLoad: function(url) {
      if(url === 'https://www.baidu.com') {
        this.$refs.baidu.style.height = this.$refs.baidu.contentWindow.document.documentElement.scrollHeight + 'px';

        if(this.$refs.baidu.scrollHeight < window.innerHeight) {
          this.autolayerHeight = this.$refs.baidu.contentWindow.document.documentElement.scrollHeight + 'px';
        }
      }
    }
  }
}
</script>

以上代码中,我们将百度搜索结果的页面嵌套到了页面中,并通过监听onIframeLoad事件来获取子页面的高度,并将iframe组件的高度调整为和子页面的高度相同,解决了嵌套第三方页面不适应当前页面的问题。

通过以上步骤,我们就可以在vue中轻松实现嵌套iframe页面。

本文标题为:在vue中实现嵌套页面(iframe)

基础教程推荐