window客户端-微信内置浏览器-公众号H5-打开白屏

原文链接:https://dsx2016.com/?p=1154

公众号:大师兄2016

问题场景

window上客户端微信打开公众号H5网页,内置浏览器白屏

一些基本的关联

  • 上一个版本是可以正常登录并且打开的,多半因为后续加了一些代码导致的白屏.

  • 手机微信和手机内置浏览器以及电脑端chrome浏览器都能正常打开网页,只有pc微信内置浏览器不行

网上检索

查找资料后,白屏的原因可能有两种:

  1. 使用了ES6/7/8/9等的新语法特性,pc微信内置浏览器不支持

  2. 微信授权时会自动去掉“#”后的内容,需要调整了&redirect_uri参数的位置等

比对文章的问题比例,新语法不支持的可能性最大,需要优先排查

定位排查

要吐槽的是电脑微信客户端内置浏览器压根就没有调试工具

使用fiddler抓包工具,也只能看到返回html资源和没有继续发送首页等请求,没办法看到JS本身的报错和阻断

回看gitlab中新加的代码有哪些新语法,无奈距离上一个正常版本已经加了N多代码,没办法一步一步回退调试

简单的试了下注释掉新加的asyncawait,promise和箭头函数,这些本就被webpackbabel编译的语法,木有问题

这就难办了,没办法找出问题,就没办法解决问题

移形换位

问题的本质是什么?

是可能不支持JS的部分新语法.

不支持新语法且又有调试控制台的是什么? 是传说的IE浏览器.

不妨试试,把当前的网页直接丢到IE浏览器看看控制台报错.

记住,优先选择和微信内置浏览器匹配或接近的IE版本,如IE9.

img

加载公众号H5网页,看看会不会白屏

如果依旧白屏,则看看控制台报错信息

经排查,看到了一个意料之外的错误:正则表达式语法错误

这不科学,所有的正则现在都是正常有效的

img

点击错误堆栈,进入具体的代码行

发现一个匹配所有汉字的正则有一个ES6的新特性 u 修饰符

修改调试

把u修饰符注销,发现pc端微信内置浏览器可以正常打开H5

至此,问题找到了,问题也解决了.

通过这种方式调试很快,不用破坏已经正常运行的代码,直接一步到位,不用猜,用事实说话.

img

思考总结

无法调试的时候,简直束手无策,冷静分析是一个软能力,尤其是被其他人催着解决和交付的时候.

要直追问题的本质,表面白屏,内里是新语法特性不支持,抓住核心,横向扩展,微信没有控制台,那就放IE9上,模拟复现问题.

  • 只有电脑微信内置浏览器有问题,其他没问题,一定要和场景特性关联思考(其实后来的调试也佐证了IE也有问题,只不过被忽略了)

  • IE9这种上古浏览器不在业务适配范围,但恰恰是这个不支持新语法特性的浏览器,快速重现了问题并在控制台暴露出问题的原因

  • 开发的坑基本上都被无数人踩过,也分享过解决方案,快速参考,有助于缩小问题范围,但解决的时候因人而异,具体问题具体讨论

当时也尝试了webpackbabel升级,尽量保证将所有的ES6等新语法特性支持编译,无奈升级失败(至少短时间不行,需要抽时间升级)

在更优解和更快解之间取舍,先解再说,不要堵塞团队开发.

END.

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 从外部h5浏览器跳转到微信公众号关注页面需要一定的技术支持。以下是几种可行的方法: 1. 使用微信公众号自带的关注二维码 - 在微信公众号后台生成关注二维码 - 将二维码图片上传到自己的网站服务器上 - 在网页中引用该二维码图片,点击时跳转到微信公众号关注页面 2. 使用微信JS-SDK的openUrl方法 - 在网页中引用微信JS-SDK - 调用JS-SDK的openUrl方法,将微信公众号的关注链接传入 - 点击时会自动跳转到微信公众号关注页面 3. 使用第三方平台提供的接口 - 在第三方平台上申请微信公众号相关的API权限 - 调用API接口,生成带有关注链接的二维码或者直接跳转到关注页面 注意:以上方法都需要用户已经安装微信客户端,并且已经关注了公众号才能实现跳转到关注页面。如果用户没有关注公众号,则会跳转到微信公众号的介绍页面。 ### 回答2: 从外部H5微信浏览器跳转到微信公众号关注页面有以下几种可行的办法: 1. 使用微信公众号的二维码:将微信公众号的关注二维码放置在H5页面上,用户在非微信浏览器上扫描二维码后,会跳转到微信浏览器打开,并直接进入关注页面。 2. 使用URL跳转:在非微信浏览器中,使用特定的URL链接,通过识别微信浏览器的UA信息,将用户重定向到微信浏览器,并直接进入关注页面。例如,可以使用以下代码来实现: ``` window.location.href = "weixin://profile/微信公众号的原始ID"; ``` 3. 调用微信JS-SDK:如果已经在微信公众号开发者平台中对H5页面进行了配置,可以通过调用微信JS-SDK中的相关接口实现跳转。具体步骤如下: a. 在H5页面中引入微信JS-SDK库,并对其进行初始化。 b. 使用微信JS-SDK提供的接口,调用`openProfile`方法,传入公众号的原始ID作为参数,实现跳转到关注页面。具体代码如下: ``` wx.ready(function() { wx.openProfile({ username: '微信公众号的原始ID', openType: 'official', }); }); ``` 以上是一些常用的从外部H5微信浏览器跳转到微信公众号关注页面的办法,根据具体的需求和环境选择适合的方法即可。 ### 回答3: 在外部H5“非微信浏览器跳转到微信公众号关注页面,主要有以下几种办法: 1. 通过生成带参数的二维码:可以在外部H5页面上生成带有微信公众号关注链接的二维码,用户在使用非微信浏览器扫描二维码后,会跳转到微信公众号关注页面。 2. 使用URL Scheme:微信提供了自定义URL Scheme的功能,可以通过调用特定的URL Scheme实现在非微信浏览器中跳转到微信公众号关注页面。例如,可以在外部H5页面上放置一个按钮,点击按钮后调用微信的URL Scheme,自动跳转到微信公众号关注页面。 3. 利用微信开放平台提供的JSAPI:微信开放平台提供了一些JSAPI供开发者使用,其中包括了关注公众号的接口。可以通过在外部H5页面中引入微信开放平台的JSAPI,并且调用关注公众号的接口,实现在非微信浏览器中跳转到微信公众号关注页面。 需要注意的是,以上方法都需要在用户手机上安装有微信客户端,并且用户需要登录微信账号才能完成跳转。另外,在一些安卓浏览器中,可能存在无法直接调用微信URL Scheme的情况,需要用户手动选择打开链接的方式。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值