vue打开其他项目的页面/打开外部链接,window模态框或内嵌在项目里

27 篇文章 1 订阅

写这篇文章的时候心情很emo,希望自己更强大吧

在项目里通过点击列表当前行,拿到每行的id之后,跳转到新页面打开外链或者以window模态框的形式在当前页打开,并且叉掉后不影响原来的页面。

一:在项目里以新页面的形式打开
先创建这个页面,路由选择隐藏

  @click="opennewview(it.id)"

window.location.origin可以拿到当前页面的URL的源,拼接好路径后,路由跳转的时候带到新页面

  opennewview(id) {
      let localurl = window.location.origin;
      let affairId = id;   
      let url =
        localurl +
        "/xxx/xxx/xxx.xx?xxx=xxxy&xxx=true&xxx=xxx&app=4&affairId=" +
        affairId;
      this.$router.push({
        path: "sys/officialtodo",
        query: { govurl: url },
      });
  
    },

在新页面中使用iframe,一定要给宽高

<template>
  <div>
    <iframe :src="govurl" frameborder="0" :height="screenHeight - 84"></iframe>
  </div>
</template>

<script>
export default {
  data() {
    return {
      govurl: "",
      screenHeight: "",
    };
  },
  created() {
    this.govurl = this.$route.query.govurl;
  },
  mounted() {
    /** 窗口动态渲染 */
    this.screenHeight = document.body.clientHeight;
    window.onresize = () => {
      this.screenHeight = document.body.clientHeight;
    };
  },
  methods: {},
};
</script>

<style scoped lang="less">
iframe {
  display: block;
  background: white;
  border: none;
  width: 100vw;
}
</style>

二,以window模态框打开,不需要新建路由
import { IEVersion } from “@/utils/browser.js”;

  @click="opennewview(it.id)"
  mounted() {
    /** 窗口动态渲染 */
    this.screenHeight = document.body.clientHeight;
    window.onresize = () => {
      this.screenHeight = document.body.clientHeight;
    };
  },
 opennewview(id) {
      let localurl = window.location.origin;
      let affairId = id;
   
      let url =
        localurl +
        "/xxx/xxx/xxx.xx?xxx=xxxy&xxx=true&xxx=xxx&app=4&affairId=" +
        affairId;
      if (IEVersion() == -1 || IEVersion() == "edge") {
        window.showModalDialog = window.open(
          url,
          "ctpPopup" + new Date().getTime(),
          "top=0,left=0,scrollbars=yes,dialog=yes,minimizable=yes,modal=open,width=" +
            this.screenWidth +
            ",height=" +
            this.screenHeight +
            ",resizable=yes"
        );
      }
    },

browser.js对应代码

export function IEVersion(){
  var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
  var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器
  var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器
  var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;
  if(isIE) {
    var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
    reIE.test(userAgent);
    var fIEVersion = parseFloat(RegExp["$1"]);
    if(fIEVersion == 7) {
      return 7;
    } else if(fIEVersion == 8) {
      return 8;
    } else if(fIEVersion == 9) {
      return 9;
    } else if(fIEVersion == 10) {
      return 10;
    } else {
      return 6;//IE版本<=7
    }
  } else if(isEdge) {
    return 'edge';//edge
  } else if(isIE11) {
    return 11; //IE11
  }else{
    return -1;//不是ie浏览器
  }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值