起因
在某个项目的信息确认的页面在一部vivo手机的自带浏览器里,detail.js文件加载失败,在其他手机上都是正常的,经过排查,不论是重试加载js,还是更改js顺序,都无法正常加载该js文件。
最后将打包的文件名修改成confirm.js后,就能够正常加载了,这时候怀疑是浏览器的广告拦截导致的问题。接着将广告拦截关闭,再把文件名改回detail.js后,就能够正常加载该js文件了,现在已经确定是广告拦截将js的加载给阻止了。
测试vivo的广告拦截策略
被拦截的js文件为detail.js,然后将这几个文件名排列组合一下,看一下有哪几种组合的js会被拦截。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| let script = []
for (let i = 0; i < 9; i++) { script[i] = document.createElement('script') script[i].onerror = function () { document.body.append(script[i].src + '::加载错误了') } }
script[0].src = '/static/lymonTest/dealVerify/js/detail.js' script[1].src = '/static/lymonTest/verify/js/detail.js' script[2].src = '/static/lymonTest/verify/js/detaillist.js' script[3].src = '/static/lymonTest/detail/js/verify.js' script[4].src = '/static/lymonTest/detail/js/verifylist.js' script[5].src = '/static/lymonTest/js/detail.js' script[6].src = '/static/lymonTest/js/verify.js' script[7].src = '/static/lymonTest/js/verifylist.js' script[8].src = '/static/lymonTest/js/detaillist.js'
setTimeout(() => { for (let i = 0; i < 9; i++) { document.body.append(script[i]) } }, 3000);
|
根据上述代码,每个js文件会输出自己的文件名,如果加载失败,则会输出该文件名加载错误。然后我们测试一下在vivo自带浏览器里,有哪几个文件会被阻止加载,结果如下:
由结果可以发现js/detail.js
这个路径的js文件会被拦截,其余的则不会,由此可以判断只要是这个路径的js文件,都会发生加载失败的问题。
解决办法
项目中打包的文件名,尽量不要用detail这个文件名,防止被拦截加载,vivo的广告拦截策略我们没法查看以及更改,所以只能避免这种情况发生。