vue项目中显示第三方外部链接的页面

embedded/2024/9/23 19:38:42/

1、打开窗口

javascript">window.open(URL, name, specs, replace);

window.open()方法用于在浏览器中打开一个新的窗口或标签页。如果不指定第二个参数,则链接通常会在当前窗口中打开,这相当于'_self'

  • name
    窗口的名称,如果指定相同的名称,那么新的URL会在同一个窗口中打开。

    • _blank
      在新窗口或新标签页中打开链接。
    • _self
      在当前窗口中打开链接(默认行为)。
    • _parent
      在父框架中打开链接。
    • _top
      在顶层框架中打开链接。
  • specs
    窗口的特性,比如大小、位置等,以逗号分隔的字符串形式传入。

  • replace
    布尔值,表示是否替换浏览器历史记录中的当前条目。

如:

javascript">window.open('https://example.com', '_blank', 'width=500,height=400');

2、主要区域容器内展示

javascript"><!-- 布局方式
---------------------------------|       Header           ||------------------------|
Aside |                        ||       Main             ||                        |
------|------------------------|
-->

希望不打开新的页签,浏览器的url不刷新,在当前系统的Main展示区中显示,可以通过Vue Router<iframe>结合,在Vue Router变化时改变<iframe>src,内容会根据路由更改显示不同的外部页面。

新建External.vue组件

javascript"><template><el-main><iframe :src="url" frameborder="0" width="100%" :style="{height:calHeight}" scrolling="auto"></iframe></el-main>
</template>
<script>
export default {data() {return {url: 'https://blog.csdn.net/m0_46613429?spm=1010.2135.3001.5343'}},computed: {//计算属性 , 设置iframe高度为窗口高度少140pxcalHeight() {return (window.innerHeight - 140) + 'px';},},
}
</script>
<style lang='scss' scoped>iframe {width: 100%;overflow-x: hidden;}
</style>

在这里插入图片描述

动态增加侧边栏,点击侧边栏展示对应的外部链接

通过菜单管理走接口添加菜单信息,里面的字段需要包括path(路由地址)、url(外链地址),同时需要一个字段type用来区分是初始化的路由,还是走接口添加的外链。为了保证一个外链对应唯一一个路由,路由地址可以设置为添加时的时间戳来保证唯一性。

javascript">path: '/' + new Date().getTime()

注意:路由地址是很有必要的,一个外链地址对应一个路由地址。

可能会想所有的外链地址都用同一个路由去匹配,这样前端就可以写死不用区配置这个字段了,只需要跳转到同一个路由页面然后把url参数传过去显示就行。实现起来会发现,通过this.$router.push跳转同一路由页面只会刷新一次的问题,如果链接了多个地址,则第一次跳转有效,后面都无效了,是因为页面没有刷新,如果在created生命周期里面进行url的赋值操作,只会执行一次。可以再用watch去监听$route,在这里面也执行一次赋值操作,功能虽然实现了,但是会发现一个现象:如果有两个相同路由的导航菜单,第一次点击其中一个,它没有被加上is-active类,第二次点击才被加上。

Element UI 的 NavMenu 导航菜单组件是根据路由匹配来决定哪个菜单项应该具有 is-active 类的

当路由改变时,Element UI 会自动检查当前路由与导航菜单的路由配置是否匹配,如果匹配,则会给相应的菜单项添加 is-active 类。
那么出现上面那种导航菜单中有多个匹配同一路由的菜单项,当第一次点击其中一个时,该菜单项没有被添加 is-active,这可能是Vue Router路由匹配机制导致的,Vue Router 会选择第一个匹配到的路由进行渲染,但由于第一次点击时,两个相同路由的导航菜单都匹配到了目标路由,但只有其中一个被选中。导航菜单组件可能需要进一步的逻辑来确保只有一个菜单项被激活。

不同的导航菜单对应不同的路由是很有必要的

所以需要动态添加路由,前面我们通过接口添加了侧边栏菜单的信息,这时在侧边栏组件中就可以通过接口获取到菜单数据,如果是外链就需要动态添加路由

javascript">menuList.forEach(ele => {if (ele.type == 0) {that.$router.addRoute('index',{name: '列表',path: ele.path,component: () => import('@/views/pages/External.vue')})}
})

点击侧边栏,显示外部链接网页

在侧边栏组件中:

javascript">clickMenu (info) {if(...) { // 正常的路由组件this.$router.push(info.path)} else { // 外部链接页面携带url参数this.$router.push({path: info.path, query:{url: info.url}})}
}

在展示外链网页的组件External.vue中:

初始化的时候以及路由变化的时候给模板中的src赋值为当前路由的外链地址

javascript"><template><!-- 动态路由页面 --><el-main><iframe :src="url" frameborder="0" width="100%" :style="{height:calHeight}" scrolling="auto"></iframe></el-main>
</template>
<script>
export default {data() {return {url: ''}},watch: {$route (to, from) {this.url = this.$route.query.url}},created() {this.url = this.$route.query.url},computed: {calHeight() {return (window.innerHeight - 140) + 'px';},},
}
</script>
<style lang='scss' scoped>iframe {width: 100%;overflow-x: hidden;}
</style>

http://www.ppmy.cn/embedded/17885.html

相关文章

C++:const成员和取地址操作符

目录 一、const成员 二、取地址及const取地址操作符重载 一、const成员 将const修饰的“成员函数”称之为const成员函数&#xff0c;const修饰类成员函数&#xff0c;实际修饰该成员函数 隐含的this指针&#xff0c;表明在该成员函数中不能对类的任何成员进行修改。 注&…

ZC3201 耐压40V输出12V 300mA LDO

概述 ZC3201是一款40V高精度微安级功率LDO稳压器。只有luA的功耗使其适用于大多数高压节电系 统。其最大工作电压高达40V. 其他功能包括低压差&#xff0c;1%的极高输出精度&#xff0c;限流保护和高纹波抑制比。 ZC3201采用SOT89-3&#xff0c;SOT23-3和SOT23-5封装。 特…

IntelliJ IDEA Java实时模板列表

常用模板 sout 生成代码&#xff1a; System.out.println($END$);功能&#xff1a; 该模板用于快速插入Java中的标准输出语句&#xff0c;将指定的内容&#xff08;由$END$标记的位置&#xff09;输出到控制台。 使用方法&#xff1a; 在编写Java代码的过程中&#xff0c…

【网络安全】安全事件管理处置 — windows应急响应

专栏文章索引&#xff1a;网络安全 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、账户排查 二、windows网络排查 三、进程排查 四、windows注册表排查 五、内存分析 总结 一、账户排查 账户排查主要包含以下几个维度 登录服务器的途径弱口令可疑账号 新增…

北京市高级职称破格申报推荐表

北京市高级职称破格申报推荐表 推荐人 基本情况 姓名 证件类型 证件号码 工作单位及职务 专业领域 联系方式 职称 证书编号 授予单位 取得时间 申报人 基本情况 姓名 证件类型 证件号码 工作单位及职务 申报职称 申报级别 申…

第十五届蓝桥杯C/C++B组题解

第十五届蓝桥杯大赛软件类省赛C/C大学B组 赛题链接A握手问题B小球反弹C好数DR格式E宝石组合F数字接龙G爬山H拔河

Linux--内核移植(一)Kernel编译启动

Linux内核编译 编译内核之前需要先在ubuntu上安装lzop库&#xff0c;另外&#xff0c;图形化配置工具还需要ncurses库支持&#xff0c;安装命令为&#xff1a; sudo apt-get install lzop sudo apt-get install build-essential sudo apt-get install libncurses5-dev 在U…

class092 贪心经典题目专题4【左程云算法】

class092 贪心经典题目专题4【左程云算法】 前言版权推荐class092 贪心经典题目专题4最后 前言 2024-4-23 14:00:04 以下内容源自《【左程云算法】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://…