[关闭]
@wwanghee 2017-03-13T14:35:18.000000Z 字数 1335 阅读 712

【腾讯项目】crossOrigin接入指南


一、背景

我们的业务BadJS经常会报Script Error的报错,不利于我们定位问题。主要是跨域问题产生此报错,我们通过crossOrigin的特性来解决跨域资源共享的问题。这样Script Error的庐山真面目就在我们眼前了。具体介绍参考此文档:http://km.oa.com/group/20251/articles/show/296041

二、crossOrigin的问题

在我们预研的过程中发现加载离线包的业务iOS侧并不生效,原因是iOS终端的离线包不会加crossOrigin的Header头,Android在版本6.3.5以下也不会加crossOrigin的Header头。非离线包业务没有此问题。

解决方案是:

1、「尽快彻底废弃离线包

2、在公共库中做好代码兼容:

  1. function checkQQVersion() {
  2. var ua = navigator.userAgent;
  3. var platform = "other";
  4. var version = 0;
  5. function compareVersion(a, b) {
  6. a = String(a).split('.');
  7. b = String(b).split('.');
  8. try {
  9. for (var i = 0, len = Math.max(a.length, b.length); i < len; i++) {
  10. var l = isFinite(a[i]) && Number(a[i]) || 0,
  11. r = isFinite(b[i]) && Number(b[i]) || 0;
  12. if (l < r) {
  13. return -1;
  14. } else if (l > r) {
  15. return 1;
  16. }
  17. }
  18. } catch (e) {
  19. return -1;
  20. }
  21. return 0;
  22. };
  23. if (/\bV1_AND_SQI?_([\d\.]+)(.*? QQ\/([\d\.]+))?/.test(ua)) {//Android
  24. var sq_v = ua.match(/AND_SQ[\w]*_([\d\.]+)/);
  25. if (sq_v && sq_v[1]) {
  26. platform = "Android";
  27. version = sq_v[1];
  28. }
  29. }
  30. else if (/iPhone/.test(ua) && /V1_IPH_SQ/.test(ua)) {//IOS
  31. var sq_v = ua.match(/QQ\/(\d+(?:\.\d+){3})/);
  32. if (sq_v && sq_v[1]) {
  33. platform = "iOS";
  34. version = sq_v[1];
  35. }
  36. }
  37. if ("other" == platform) {
  38. return false;
  39. }
  40. if (("Android" == platform && compareVersion(version, "6.3.5") >= 0) ||
  41. ("iOS" == platform && compareVersion(version, "7.0.0") >= 0)) {
  42. return true;
  43. }
  44. return false;
  45. }
  46. if (uri.indexOf('_bid=') < 0 || checkQQVersion()) {
  47. script.crossOrigin = "anonymous";
  48. }

三、crossOrigin的接入

代码特性已封装到公共库中,个性化业务随版本更新即可拥有此特性,无需额外操作。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注