deviceType.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. export default function({ req }, inject) {
  2. let deviceType = {};
  3. deviceType.ios = false;
  4. deviceType.android = false;
  5. deviceType.pc = false;
  6. deviceType.ios = false;
  7. deviceType.wx = false;
  8. deviceType.app = false;
  9. deviceType.spider = false;
  10. let cookie = "",
  11. ua = "";
  12. /** 通过UA判断设备类型 **/
  13. if (req && req.headers) {
  14. ua = (req && req.headers && req.headers["user-agent"]) || "";
  15. } else if (window && window.navigator) {
  16. ua = window.navigator.userAgent;
  17. }
  18. if (/(iPhone|iPad|iPod|iOS)/i.test(ua)) {
  19. deviceType.ios = true;
  20. } else if (/(Android)/i.test(ua)) {
  21. deviceType.android = true;
  22. } else {
  23. deviceType.pc = true;
  24. }
  25. /** 通过cookie 判断是不是APP **/
  26. if (req && req.headers) {
  27. cookie = req.headers.cookie || "";
  28. } else if (document) {
  29. cookie = document.cookie;
  30. }
  31. deviceType.app = judgeHasX_APP(cookie);
  32. /** 判断是不是 微信 **/
  33. if (/(MicroMessenger)/i.test(ua)) {
  34. deviceType.wx = true;
  35. }
  36. /** 判断是不是 蜘蛛 **/
  37. if (/(spider)/i.test(ua)) {
  38. deviceType.spider = true;
  39. }
  40. deviceType.isMobile = function() {
  41. return deviceType.ios || deviceType.android;
  42. };
  43. deviceType.isPC = function() {
  44. return deviceType.pc;
  45. };
  46. deviceType.isWx = function() {
  47. return deviceType.wx;
  48. };
  49. function judgeHasX_APP(cookiedata) {
  50. var cookies = cookiedata ? cookiedata.split("; ") : [];
  51. var i = 0;
  52. for (; i < cookies.length; i++) {
  53. var parts = cookies[i].split("=");
  54. var name = parts[0].replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);
  55. if (name === "x_app") {
  56. return true;
  57. }
  58. }
  59. //兼容android 4.18cookie注入错误
  60. // if (deviceType.android) {
  61. // return true
  62. // }
  63. return false;
  64. }
  65. inject && inject("deviceType", deviceType);
  66. // test nhj
  67. // deviceType.app = true
  68. return deviceType;
  69. }