@wwanghee
2017-03-13T14:35:18.000000Z
字数 1335
阅读 712
我们的业务BadJS经常会报Script Error的报错,不利于我们定位问题。主要是跨域问题产生此报错,我们通过crossOrigin的特性来解决跨域资源共享的问题。这样Script Error的庐山真面目就在我们眼前了。具体介绍参考此文档:http://km.oa.com/group/20251/articles/show/296041。
在我们预研的过程中发现加载离线包的业务iOS侧并不生效,原因是iOS终端的离线包不会加crossOrigin的Header头,Android在版本6.3.5以下也不会加crossOrigin的Header头。非离线包业务没有此问题。
解决方案是:
1、「尽快彻底废弃离线包」
2、在公共库中做好代码兼容:
function checkQQVersion() {var ua = navigator.userAgent;var platform = "other";var version = 0;function compareVersion(a, b) {a = String(a).split('.');b = String(b).split('.');try {for (var i = 0, len = Math.max(a.length, b.length); i < len; i++) {var l = isFinite(a[i]) && Number(a[i]) || 0,r = isFinite(b[i]) && Number(b[i]) || 0;if (l < r) {return -1;} else if (l > r) {return 1;}}} catch (e) {return -1;}return 0;};if (/\bV1_AND_SQI?_([\d\.]+)(.*? QQ\/([\d\.]+))?/.test(ua)) {//Androidvar sq_v = ua.match(/AND_SQ[\w]*_([\d\.]+)/);if (sq_v && sq_v[1]) {platform = "Android";version = sq_v[1];}}else if (/iPhone/.test(ua) && /V1_IPH_SQ/.test(ua)) {//IOSvar sq_v = ua.match(/QQ\/(\d+(?:\.\d+){3})/);if (sq_v && sq_v[1]) {platform = "iOS";version = sq_v[1];}}if ("other" == platform) {return false;}if (("Android" == platform && compareVersion(version, "6.3.5") >= 0) ||("iOS" == platform && compareVersion(version, "7.0.0") >= 0)) {return true;}return false;}if (uri.indexOf('_bid=') < 0 || checkQQVersion()) {script.crossOrigin = "anonymous";}
代码特性已封装到公共库中,个性化业务随版本更新即可拥有此特性,无需额外操作。