UNPKG

tencent-qqnews-user

Version:

用于在腾讯新闻客户端中进行登录、获取用户信息和提交请求等操作

170 lines (148 loc) 4.78 kB
/** * get script * @param {*} url * @param {*} callback * @param {*} sid */ export const getScript = function (url, callback, sid) { var head = document.getElementsByTagName('head')[0], js = document.createElement('script'); js.setAttribute('type', 'text/javascript'); js.setAttribute('charset', 'UTF-8'); js.setAttribute('src', url); sid && js.setAttribute('id', sid); head.appendChild(js); //执行回调 var callbackFn = function () { if (typeof callback === 'function') { callback(); } }; if (document.all) { //IE js.onreadystatechange = function () { if (js.readyState == 'loaded' || js.readyState == 'complete') { callbackFn(); } }; } else { js.onload = function () { callbackFn(); }; } }; export const os = (function () { if (typeof window === 'undefined') { return {}; } var userAgent = navigator.userAgent.toLowerCase(); let _version = 0; if (/qqnews/.test(userAgent)) { var qqnews_version = userAgent.match( /(qqnews\/|qqnewslite\/)(\d+\.\d+\.\d+)/ ); var [major, minor, patch] = qqnews_version && qqnews_version[2] ? qqnews_version[2].split('.') : [0, 0, 0]; _version = Math.floor(major) * 100 + Math.floor(minor) + Math.floor(patch) / 1000; } return { androidversion: userAgent.substr(userAgent.indexOf('android') + 8, 3), ipad: /ipad/.test(userAgent), iphone: /iphone/.test(userAgent), android: /android/.test(userAgent), qqnews: /qqnews/.test(userAgent), qqnewslite: /qqnewslite\//.test(userAgent), // 极速版 weixin: /micromessenger/.test(userAgent), mqqbrowser: /mqqbrowser\//.test(userAgent), // QQ浏览器 qq: /qq\//.test(userAgent), // 手机QQ tenvideo: /qqlivebrowser/.test(userAgent), // 腾讯视频 qqmusic: /qqmusic/.test(userAgent), //QQMUSIC qqac: /qqac_client/.test(userAgent), // 腾讯动漫 qqnews_version: _version, }; })(); export const cookie = { // 写cookies setCookie(name, value, day) { let Days = day || 30; let exp = new Date(); exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000); document.cookie = name + '=' + escape(value) + ';path=/;expires=' + exp.toGMTString(); }, // 读取cookies getCookie(name, type = 0) { let reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); let arr = document.cookie.match(reg); if (arr) { return type ? arr[2] : unescape(arr[2]); } else { return ''; } }, delCookie(name) { let ex = new Date(); ex.setTime(ex.getTime() - 1); document.cookie = name + '=; expires=' + ex.toGMTString() + ';path=/'; }, }; export const callbackRandom = (prefix = 'cb') => { const date = new Date(); return `${prefix}${(date.getTime() + '').substr(-8)}_${( Math.random() + '' ).substr(-8)}`; }; export const jsonp = (url, data = {}, callback) => { let target = document.getElementsByTagName('script')[0] || document.head; let fetchCallBack = callbackRandom(); let timeout = 6000; let script; let timer; let cleanup = () => { if (script.parentNode) script.parentNode.removeChild(script); window[fetchCallBack] = () => {}; if (timer) clearTimeout(timer); }; // 将Object类型的数据转换为URL链接需要的参数 let paramObj = (params) => { let str = '', key, item; for (key in params) { if (typeof params[key] === 'object') { item = JSON.stringify(params[key]); } else { item = params[key]; } str += `&${key}=${encodeURIComponent(item)}`; } return str.substring(1); }; return new Promise((resolve, reject) => { if (timeout) { timer = setTimeout(() => { cleanup(); reject(new Error(url + ' Timeout')); }, timeout); } window[fetchCallBack] = (data) => { cleanup(); resolve(data); }; url += (~url.indexOf('?') ? '&' : '?') + paramObj(data) + '&callback=' + fetchCallBack; // create script script = document.createElement('script'); script.src = url; target.parentNode && target.parentNode.insertBefore(script, target); script.onerror = reject; }); };