Vue进阶(贰零叁):iframe嵌套页面IE不展示问题解决_iframe src 无效果(1)

最后

一个好的心态和一个坚持的心很重要,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

分享一些前端面试题以及学习路线给大家

三、解决方法

通过B项目系统检测到A项目系统传递的系统标识,向A系统发送消息,消息体中包含A系统待展示的页面URL,A系统通过监听接收到B系统发送过来消息,刷新当前页面,处理逻辑如下:
A系统:

<template>
  <div>
    <iframe v-if="hackReset" ref="otherSysIFrame" frameborder="0" height="1100" width="100%" :src="$route.params.url"></iframe>
  </div>
</template>

<script>
  export default {
    data () {
      return {
        hackReset: false
      }
    },
    updated () {
      this.hackReset = true
      this.$nextTick(() => {
        if (this.$refs.otherSysIFrame) {
          let iframeSrc = this.$route.params.url
          if (this.getClass(iframeSrc) === 'String' && iframeSrc.indexOf(window.location.host) > -1) {
            this.$refs.otherSysIFrame.contentWindow.location.href = iframeSrc
          }
        }
      })
    },
    watch: {
      $route: {
        handler () {
          this.hackReset = false
        }
      }
    },
    mounted () {
      this.hackReset = true
      window.addEventListener('message', event => {
        if (this.$refs.otherSysIFrame) {
          this.$refs.otherSysIFrame.contentWindow.postMessage(event.data, '\*')
          // IE
          if (this.getIEVersion() !== -1) {
            if (this.getClass(event.data) === 'String' && event.data.indexOf('URL_LINK') > -1) {
              let URL_LINK = JSON.parse(event.data).URL_LINK || ''
              if (URL_LINK && this.getClass(URL_LINK) === 'String') {
                let secondWindow = this.$refs.otherSysIFrame.contentWindow
                for (let i = 0; i < secondWindow.frames.length; i++) {
                  secondWindow.frames[i].location.href = URL_LINK
                }
              }
            }
          }
        }
      })
    }
  }
</script>

B系统:

if (vm.$route.query.source && (vm.$route.query.source === 'castlm' || vm.$route.query.source === 'exosystem')) {
  vm.isExosystem = true
  // 外系统返回按钮显示标识
  if (vm.$route.query.backBtnFlag === 'backBtn') {
    vm.backBtnFlag = true
    vm.display = true // 显示返回按钮
  } else {
    vm.display = false // 隐藏返回按钮
  }
  if (vm.$route.query.bustpid === 'Main') {
    vm.iframeRefreshFlag = true
  }

else if (vm.query.flag && vm.query.flag === 'Exosystem') {
  vm.isExosystem = true
  if (vm.query.bustpid) {
    if (vm.query.bustpid === 'Main') {
      vm.iframeRefreshFlag = true
    }
    vm.bustpid = vm.query.bustpid
  }
  body = {
    tkiids: vm.query.tkiids,   // 任务实例id
    nodeid: vm.query.nodeid, // 当前环节
    tpid: vm.query.tpid,       // 模板ID
    piids: vm.query.piids,
    isEdit: vm.query.isEdit // 是否可编辑页面
  }
}
....
mounted () {
  // console.log('mounted!')
  // 挂载window.onresize事件
  let _this = this // 复制Vue的this
  _this.changeFrameSize()
  window.onresize = () => {
    _this.changeFrameSize()


### 最后

**一个好的心态和一个坚持的心很重要**,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

**分享一些前端面试题以及学习路线给大家**

![](https://img-blog.csdnimg.cn/img_convert/86257a1c779239696d2e6f7069c933f2.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/c6148c97a3741998ef55e9cb1cd36125.webp?x-oss-process=image/format,png)

c3ab8389e65ecb71ac0)**

**分享一些前端面试题以及学习路线给大家**

[外链图片转存中...(img-jcRiVTb3-1715844769542)]

[外链图片转存中...(img-w68L0mLe-1715844769542)]

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在网页中嵌套使用iframe时,可能会遇到一些问题,如样式冲突、无法调整大小、页面加载速度慢等。下面介绍一些解决iframe嵌套页面问题的方法。 首先,针对样式冲突问题,可以使用CSS命名空间(CSS Namespaces)来解决。通过添加命名空间前缀,可以确保不同iframe中的元素样式不会相互冲突。这样可以避免样式被覆盖,保证每个iframe中的样式独立。 其次,针对调整iframe大小问题,可以使用JavaScript来动态调整iframe的大小。通过监听iframe内部内容的高度变化,并将高度值传递给父页面,从而实现自适应调整iframe的大小。这样可以确保iframe始终能够显示完整的内容,提高用户体验。 另外,针对页面加载速度慢的问题,可以通过延迟加载或者懒加载来提升性能。即在页面初次加载时,只加载展示iframe的占位符,并不加载真正的内容。当用户需要查看或者操作iframe时,再加载对应的内容。这样可以减少初次加载的数据量,提高页面加载速度。 此外,还可以考虑使用无需iframe的其他技术来实现类似的功能,如Ajax、Vue.js等。这些技术可以通过异步加载内容或者组件来避免使用iframe,从而减少了嵌套页面问题。 综上所述,处理iframe嵌套页面问题需要使用CSS命名空间、动态调整大小、延迟加载或懒加载等方法。同时也可以考虑使用其他技术来避免使用iframe带来的问题。通过采取这些方法,可以更好地解决iframe嵌套页面问题,提升用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值