注意:当前在vue2.0框架+node-15.4.1,本地运行的项目在微信、其他浏览器上运行都是正常显示,甚至是苹果在钉钉上访问都没问题,就唯独安卓在钉钉上访问,有标题,但页面内容为空…(本篇博客侧重点是为了记录解决问题的过程,如果最终没有解决你的问题,也希望勿喷~)
先贴上大致的项目目录结构
一、在网上查找相关的解决办法(尝试以下的方法都无效)
- 在webpack配置项rules中babel-loader添加resolve(‘config’)
二、根据项目执行顺序进行排查
- 在index.html中添加alert弹窗,发现弹窗正常执行。
因为安卓在访问的时候明显是有页面标题显示,说明至少index.html是可访问的,
- 在index.html添加vconsole插件,查看项目运行的元素(elements)、控制台(console)、网络请求(network)情况
元素:#app的元素内是空的,说明并没有走到new Vue({}),或者说new Vue({})没有执行完就被阻塞了。
控制台:发现一个报错script error
,脚本执行错误。
网络:只有一个页面正常的socket连接请求。
- 弄清楚到底是没执行mainJS还是执行了被终止了
最开始也是加了一个alert弹窗,发现没有弹出,以为是没执行,后面故意制造一个报错,值得高兴的是报错被打印了,那就是说明程序是运行被终止了,而且至少是运行了mainJS。
- 在mainJS上一个个注释引用的插件
最终发现报错是从路由那边引起的,然后尝试将路由内的权限校验、meta配置等等注释,发现报错依然存在,索性直接将路由项只写了一个简单页面(就只有一个div标签,其他都是默认配置),发现安卓可以正常访问,这个时候大致可以判断是我原先要访问的页面(为了方便,后续称作A页面)内的问题,确保万无一失,把路由只配置原先访问的页面,发现不能正常访问,这就算确定是A页面出现的问题。
- A页面一个个注释引用的插件
确定了问题出在近期添加的一个扫码插件(html-qrcode)
- 尝试解决扫码插件的兼容性问题
一开始将扫码插件的依赖也加入到babel-loader中,没有效果还出现一系列警告,
script error
报错仍存在
经过网上了解到,很多扫码插件,为了安全性,只允许本地或者带着https的域名访问,在本地运行项目的时候,在配置跨域(proxy)的地方添加https: ture,重新运行项目即可解决问题。
- 最后总结
一开始觉得是因为内容为空的,再加上以为mainJS都没有执行,所以没有检查思路,只是一味的上网搜索相关解决方案,有了这次的经历之后,才明白自己的基础功还是太差了,缺乏冷静思考
因为这个项目是只在钉钉上运行,又加上一些其他的原因测试服务器不方便配置https服务,我考虑换了一款利用钉钉第三方sdk的扫码,是真的很方便。原文链接
cnpm install dingtalk-jsapi // 下载dingtalk-jsapi
import * as dingtalk from 'dingtalk-jsapi'; // 局部引入
// 方法使用
dingtalk.ready(function () {
dingtalk.biz.util.scan({
type: 'all', // type 为 all、qrCode、barCode,默认是all
onSuccess: function (data) {
//对返回的数据进行转换
},
onFail: function (err) {
console.log(err)
}
});
});