问题描述:

在 iOS 系统中,用微信打开了 A 页面的链接,然后由 A 页面进入 B 页面

在 B 页面打开微信右上角菜单,使用“复制链接”功能

最后粘贴出来的链接是 A 页面的链接

分析原因:

这个问题在微信 6.2 时代就已存在,GitHub 上有很多人到 weui 的主页提 issue

https://github.com/Tencent/weui/issues/125

https://github.com/wuchangming/blog/issues/1

这两个 issue 给了我很大的启发

出现这个问题的原因,是因为微信内置浏览器对 history 的支持不够全面

所以对于开启了 History Mode 的 SPA 应用,只会保存第一条 url

只要每个页面都刷新一次,严格的说不能是简单的刷新,需要用 location.replace 刷新页面,就能解决该问题

解决方案:

在使用了 vue-router 的项目中,添加路由守卫

在每次跳转结束的时候,给 URL 添加一个随机参数 wxr,然后执行 location.replace

当 URL 已经有了 wxr 这个参数,就直接加载页面,避免无限刷新

function wxRefresh (to) {
// 在链接后加一个随机参数 wxr,以解决 ios 复制链接的问题
let wxr = 'wxr=' + new Date().getTime();
let url = location.protocol + '//' + location.host + '/page/im' + to.fullPath;
if (location.search) {
url = url + '&' + wxr;
} else {
url = url + '?' + wxr;
}
window.location.replace(url);
} // 跳转结束后校验 wxr 参数
app.router.afterEach((to, from) => {
!to.query.wxr && wxRefresh(to);
});

另外,在页面内需要将 url 还原为正常的地址

可以在 vuex 或者第三方 js 中添加一个公用方法

setCurrentUrl: () => {
// 删除 url 中手动添加的随机数 wxr
let url = location.href.replace(/&wxr=[-]{}/g, '');
window.history.replaceState({}, document.title, url);
}

然后在 mounted 或者 created 中调用这个方法就好了

iphone 上微信的“复制链接”功能复制出来的是修改前的链接的更多相关文章

  1. 几何服务,cut功能,输入要素target(修改前)内容。

    几何服务,cut功能测试,输入要素target(修改前)内容. {"geometryType":"esriGeometryPolyline","geo ...

  2. vue+element-ui 项目中实现复制文字链接功能

    需求: 点击复制按钮,复制一个链接 在GitHub上找到一个clipboard组件,功能比较齐全 使用方法:   安装 npm i clipboard --save HTML <template ...

  3. demo:复制粘贴功能

    复制链接功能,也是为了方便用户一键"复制",粘贴链接和文本到指定位置,在此,接着上一篇"demo:生成专属二维码link "来记录一键"复制" ...

  4. Android仿iPhone晃动撤销输入功能(微信摇一摇功能)

    重力传感器微信摇一摇SensorMannager自定义alertdialogSensorEventListener 很多程序中我们可能会输入长文本内容,比如短信,写便笺等,如果想一次性撤销所有的键入内 ...

  5. Android EditText 取消复制粘贴功能,取消横向全屏编辑功能(一)

    在做一些安全性的软件时候常常要考虑取消 EditText 上的复制粘贴功能以确保安全性.下面就记录了这个方法: 首先在API-11以下的版本很简单,只需要在Xml布局文件或者用代码把长按属性设置成fa ...

  6. js实现点击按钮复制文本功能

    最近项目活动中用到复制文本功能,发现在chrome中之前的clipboard的demo失效了,查了下发现是因为版本升级导致的.最新用法如下: <!DOCTYPE html> <htm ...

  7. js禁用页面上右键菜单、选中和复制

    有时候我们不想页面上的内容被人复制走,那么就可以使用js对页面进行设置,禁止右键菜单.禁止选中.禁止复制等功能可以有效的达到这个效果,js代码如下所示: /** * 禁用右键菜单 */ documen ...

  8. Winform 使用热键功能实现Ctrl+C和Ctrl+V复制粘贴功能

    当我们使用winform控件的时候,会发现这些控件(比如Label)不支持Ctrl+c 复制和Ctrl+v 快捷键复制粘贴功能,如果我们需要实现这个功能改怎么做呢? 1. 首先我们创建一个winfor ...

  9. 【转载】 C#通过File类实现文件拷贝复制的功能

    在Windows系统的使用过程中,一个较常使用的功能就是文件的复制拷贝操作,其实在C#开发中,也可以使用File类库中的Copy方法来实现文件的拷贝,支持设定原文件地址,以及拷贝复制后的文件存放路径. ...

随机推荐

  1. Nginx 负载均衡与反向代理

    通过设置权重来轮询 weight server 192.168.1.62  weight=5 server 192.168.63 weight=1 ip_hash 第3方均衡策略 fair url_h ...

  2. OpenGL ES: 纹理采样 texture sample

    Sampler (GLSL) Sampler通常是在Fragment shader(片元着色器)内定义的,这是一个uniform类型的变量,即处理不同的片元时这个变量是一致不变的.一个sampler和 ...

  3. mybatis 详解(一)

    http://www.cnblogs.com/ysocean/p/7271600.html 1.什么是MyBatis? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目 ...

  4. Linux - 快速进入目录的方法

    cd命令技巧 直接进入用户的home目录: cd ~ 进入上一个目录: cd - 进入当前目录的上一层目录: cd .. 进入当前目录的上两层目录: cd ../.. 其他常用方法 利用tab键,自动 ...

  5. OC学习3——C语言特性之指针

    1.指针是C语言中的一个非常重要的概念,实际上,OC系统类的变量.自定义类的变量等都是指针.定义指针变量的语法格式如下,其中*代表一个指针变量,整个语法代表定义一个指向特定类型的变量的指针变量.注意: ...

  6. python(31)——【sys模块】【json模块 & pickle模块】

    一.sys模块 import sys sys.argv #命令行参数List,第一个元素是程序本身路径 sys.exit() #退出程序,正常退出时exit(0) sys.version #获取pyt ...

  7. 夜神模拟已开启,adb命令检测不了设备解决方法

    日常APP测试中,很难拥有多种机型和各种安卓版本的手机,此时可以借助模拟器. 命令返回结果只有 “List of devices attached”,即代表检测不了模拟器 最近在使用夜神模拟器的时候, ...

  8. [EXP]Joomla! Component Easy Shop 1.2.3 - Local File Inclusion

    # Exploit Title: Joomla! Component Easy Shop - Local File Inclusion # Dork: N/A # Date: -- # Exploit ...

  9. web自动化测试(java)---元素定位

    和python类似,java-selenium也提供了很多种元素定位的方法,具体如下: findElement(By.id()) findElement(By.name()) findElement( ...

  10. jq版本的checkbox有radio的单选效果(可得到value值)

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>复 ...