跳转别人的页面,怎么加个返回呢

15,094 阅读1分钟

有时候需要跳转别人的页面,但是需要在别人的页面,加个返回之类等,我们需要的逻辑。
此时,iframe就是个不错的解决方案.
但是 iframe 的属性,我总记不住,索性写个组件,回头就可以直接用了

安装

# yarn add iframe-cp
npm i iframe-cp

使用

import IframeCp from 'iframe-cp';

<iframe-cp url="https://www.pudn.com/news/627e169c9b6e2b6d5541c74a.html">
  写返回键之类巴拉巴拉的
</iframe-cp>;

iframe需要特定样式的话,直接传入iframeStyle="...."就好

最佳使用:将其配置成页面路由

将上面的配置成一个页面,页面路径为/to-page

假设现在跳到https://www.baidu.com,以前可能是location.href = xxx

现在可以是

const url = https://www.baidu.com
this.$router.push({
    path: '/to-page',
    query: {
       url: window.encodeURI(url),
     },
});

这样以后跳到非项目页面,都可以直接这种方式,当然也可以封装方法,这样更方便。

这里也注意,返回键直接回之前的页面,也就是新的跳转页面如果本身多层嵌套,返回也是直接跳出新页面

案例

<template>
  <iframe-cp url="https://www.pudn.com/news/627e169c9b6e2b6d5541c74a.html">
    <div class="header" @click="() => this.$router.go(-1)">
      <img
        width="24"
        src="https://blog-huahua.oss-cn-beijing.aliyuncs.com/blog/code/back.png"
        alt=""
        class="icon"
      />
    </div>
  </iframe-cp>
</template>
<style scoped>
.header {
  height: 44px;
  display: flex;
  background: #fff;
  align-items: center;
  padding-left: 16px;
  padding-right: 16px;
}
</style>

案例效果

原理

没啥原理,就是iframe,属性是

<iframe :src="url" frameborder="0" :style="iframeStyle"></iframe>

源码

<script>
export default /*#__PURE__*/ {
  name: 'IframeCp', // vue component name
  props: {
    url: {
      type: String,
      default: 'https://www.pudn.com/news/627e169c9b6e2b6d5541c74a.html',
    },
    iframeStyle: {
      type: String | Object,
      default: 'min-height: 100vh; width: 100%',
    },
  },
};
</script>

<template>
  <div class="iframe-cp">
    <slot> </slot>
    <iframe :src="url" frameborder="0" :style="iframeStyle"></iframe>
    <slot name="after"> </slot>
  </div>
</template>