泰生活更新CDN和泰生活IOS方法返回

泰生活用于填充cdn更新内容和泰生活IOS方法返回

  1. // ==UserScript==
  2. // @name 泰生活更新CDN和泰生活IOS方法返回
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1.17
  5. // @description 泰生活用于填充cdn更新内容和泰生活IOS方法返回
  6. // @author zhangxx138
  7. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAABpElEQVR4nO3Vv2uUQRDG8c/ebSMWqay0trATAxrUSi1S2AiWFoJYpNCgoBjURsHWJKeNRfAvsDgFixQqKdPZ2ViEiCJYBOQu8f1hEXO59713j7MUfLZ6d2a/O8vMO0OzDnin9Ku2Mjvuaw07xgSAYEVXe2indMhj92zpKJLnBhF8MDeye9hn6zbN70eRiqCw02Bra3up8BBLu1FEBxsBucXqW4csz0ULe4jorSCMuPU89boRELDMHiI6Y8V65bbCUTccc70RkaOwKLOg0IkyXa9qTjOu2LAs6NZuD86hrdTyxRNTkUqqdhXlHrngGRVEZsMpJwex9DxIZSHYclesIb65LCoHgIs66UJq6btDBZHZrPh8V6YBOX66LbOkTGckBYimBW2FVTNeuOZNyrFJ236Yl4NSy5SbVm1PDvhodqgyMledTdRlAtDzqfL9tfkwUtyaRkv9LwFj9B/w7wPycXOhqlJ0yZHKPChMi5MCiM47XhsopbVJAUHfrYbmN/EToN+02eLPfz9OYyZhFJzW1Jn3lTsxaKQjCkp52jy45r1ZvSbTb9M0d4PBozGZAAAAAElFTkSuQmCC
  8. // @run-at document-start
  9. // @match https://console.cloud.tencent.com/*
  10. // @match https://medicaluat.mobile.taikang.com/*
  11. // @match https://tklifetest.mobile.taikang.com/*
  12. // @match https://dentalgmall500.taikang.com/*
  13. // @match https://dentalmbybo500.taikang.com/*
  14. // @match https://pointsit500.taikang.com/*
  15.  
  16. // @match https://tlifehealth.taikang.com/*
  17. // @match https://operation.mobile.taikang.com/*
  18. // @match https://operation.taikang.com/*
  19. // @match https://tklife.mobile.taikang.com/*
  20. // @match https://tshmall.wanyuhengtong.com/*
  21. // @match https://point.taikang.com/*
  22. // @match http://localhost/*
  23. // @match https://localhost/*
  24. // @grant none
  25. // @license MIT
  26. // ==/UserScript==
  27.  
  28.  
  29. (function () {
  30. 'use strict';
  31.  
  32. // 刷新CDN
  33. if (location.hostname == 'console.cloud.tencent.com') {
  34. var id1 = 'cdn-my-test1'
  35. var id2 = 'cdn-my-test2'
  36. var $dom = document.createElement('div');
  37. $dom.id = id1;
  38. $dom.innerText = '健康cdn';
  39. document.body.appendChild($dom);
  40. var $dom2 = document.createElement('div');
  41. $dom2.id = id2;
  42. $dom2.innerText = '首页cdn';
  43. document.body.appendChild($dom2);
  44. var style = document.createElement('style');
  45.  
  46. style.type = 'text/css';
  47.  
  48. style.textContent = `
  49. #cdn-my-test1{
  50. position: fixed;
  51. right: 20px;
  52. bottom: 120px;
  53. z-index: 9999;
  54. width: 60px;
  55. height: 60px;
  56. line-height: 60px;
  57. border-radius: 50%;
  58. font-size: 12px;
  59. border: 1px solid #f00;
  60. text-align: center;
  61. color: #000;
  62. background-color: #ccc;
  63. }
  64. #cdn-my-test2{
  65. position: fixed;
  66. right: 20px;
  67. bottom: 40px;
  68. z-index: 9999;
  69. width: 60px;
  70. height: 60px;
  71. line-height: 60px;
  72. border-radius: 50%;
  73. font-size: 12px;
  74. border: 1px solid #f00;
  75. text-align: center;
  76. color: #000;
  77. background-color: #ccc;
  78. }
  79. `;
  80. function changeFn (str) {
  81. var list = document.getElementsByClassName('app-cdn-textarea')
  82. for (let i = 0; i < list.length; i++) {
  83. list[i].value = str
  84. var keyDownEvent = new KeyboardEvent('keydown', {
  85. 'keyCode': 13,
  86. 'bubbles': true,
  87. 'cancelable': true
  88. });
  89. list[i].dispatchEvent(keyDownEvent);
  90. }
  91. }
  92. document.getElementsByTagName('HEAD').item(0).appendChild(style);
  93. setTimeout(() => {
  94. var myTimer = setInterval(() => {
  95. var $dom = document.querySelector('.app-cdn-textarea');
  96. if ($dom) {
  97.  
  98. clearInterval(myTimer);
  99. document.getElementById(id1).style.cssText =
  100. 'background-color: #fff;cursor: pointer;';
  101. document.getElementById(id1).addEventListener('click', function (e) {
  102. changeFn(`https://tlifehealth.taikang.com`)
  103. });
  104. document.getElementById(id2).style.cssText =
  105. 'background-color: #fff;cursor: pointer;';
  106. document.getElementById(id2).addEventListener('click', function (e) {
  107. changeFn(`https://tklife.mobile.taikang.com
  108. https://operation.mobile.taikang.com`);
  109. });
  110. }
  111. }, 500);
  112. }, 1000);
  113. }
  114.  
  115. if (['localhost', 'medicaluat.mobile.taikang.com', 'tklifetest.mobile.taikang.com', 'dentalgmall500.taikang.com', 'dentalmbybo500.taikang.com', 'pointsit500.taikang.com', 'tlifehealth.taikang.com', 'operation.mobile.taikang.com', 'operation.taikang.com', 'tklife.mobile.taikang.com', 'tshmall.wanyuhengtong.com', 'point.taikang.com'].includes(location.hostname)) {
  116. var ua = navigator.userAgent.toLowerCase()
  117. if (
  118. !/TSH-iOS/i.test(ua)) { // 泰生活 ios)
  119. return false;
  120. }
  121. // 保险的页面,会取本地的缓存
  122. localStorage.clear();
  123. sessionStorage.clear();
  124.  
  125. var token = null;
  126.  
  127. window.webkit = {
  128. messageHandlers: {
  129. NativeFunction: {
  130. postMessage: async (paramsStr) => {
  131.  
  132. const obj = JSON.parse(paramsStr)
  133. console.log('调用原生IOS的方法参数:', obj)
  134. /**
  135. callback: "setNavigationBarColor2"
  136. command: "setNavigationBarColor"
  137. parameter: {backgroundColor: '#FFFFFF'}
  138. *
  139. */
  140. var callbackData = {
  141. data: '',
  142. code: '0'
  143. }
  144. //解析各种方法
  145. // 不用回调的方法(纯设置原生的方法,返回啥都行的)
  146. if (['hideNavAction', 'setNavigationBarColor', 'closePage', 'closePageAction', 'gobackAction', 'startRealName', 'setPopGestureForIOS', 'setWebViewBounces', 'MiniProgramAPM', 'backOrClose', 'changeDisplayMode', 'onPageStart', 'onAppEnterForeground', 'onBackPressed', 'onAppEnterBackground', 'onShow', 'showNavRightButtonAction', 'changeStatusBarTransparent', 'showNavAction', 'showsVerticalScrollIndicator'].includes(obj.command)) {
  147. callbackData.data = true
  148. }
  149. // 自定义返回结果的
  150. if (['startBusinessDetailPage', 'startHealthMianfeiwenzhen', 'openNativePage', 'startVipRightsKehujingli', 'startVipRightsTijianyuyue', 'startVipRightsACTijianyuyue', 'wealthEquityDetail', 'toChooseCity', 'miniOCRBaseUrl', 'newImageSelector', 'startBaseInformationPage', 'startBusinessProgress', 'startPolicySchedulePage', 'dismissPageAction', 'newChangePersonTelephone', 'downloadUpdateApp', 'changeAddress', 'faceLivenessRecognitionService', 'faceRecognitionService', 'insuranceFaceVerification', 'insuranceFaceMultipleIdentificationVerification', 'startRecommendManager', 'commonShortLink', 'openSpeechInput', 'compressImage', 'showNativeInputLayout', 'hideNativeInputLayout', 'onVoiceInputClickKeyBoard', 'onVoiceInputClickKeyEmoji', 'onVoiceInputClickKeyPLus', 'onShowVoiceAnimatorArea', 'onHideVoiceAnimatorArea', 'onReceiveVoiceInputData', 'startUpLoadTask', 'systemNotificationPopupNew', 'startPrivateDataUnlock', 'startUpLoadTask'].includes(obj.command)) {
  151. var otherStr = window.prompt("暂不支持" + obj.command + ",自定义的返回结果:", '{"code":"0","data":true}');
  152. callbackData = JSON.parse(otherStr)
  153. }
  154. // 需要回调的方法
  155. // 登录
  156. if (obj.command == 'loginService' || obj.command == 'loginServiceV2') {
  157. token = token ? token : 'Bearer ' + await getToken()
  158. callbackData.data = '已登录'
  159. callbackData.token = token
  160. }
  161.  
  162. // 获取token
  163. if (obj.command == 'userJWTService') {
  164. token = token ? token : 'Bearer ' + await getToken()
  165. callbackData.data = {
  166. token: token
  167. }
  168. // callbackData.token = token
  169. }
  170.  
  171. // 获取设备信息
  172. if (obj.command == 'deviceInfoService') {
  173. callbackData.data = {
  174. "mobileType": "iPhone13,2",
  175. "deviceId": "E7CFD549-DE69-4E65-97E7-78AD39FC2C1A",
  176. "systemVersion": "16.4.1",
  177. "mobileBrand": "iPhone",
  178. "appVersion": "6.32.0",
  179. "terminalType": "IOS"
  180. }
  181. }
  182. // 获取设备信息
  183. if (obj.command == 'getSystemInfo') {
  184. callbackData.data = { "safeArea": { "right": "0.0", "height": "763.0", "top": "47.0", "width": "390.0", "left": "0.0", "bottom": "34.0" }, "version": "6.32.0", "system": "iOS 16.4.1", "inHera": true, "windowHeight": "844.0", "deviceId": "E7CFD549-DE69-4E65-97E7-78AD39FC2C1A", "pixelRatio": "3.0", "screenHeight": "844.0", "SDKVersion": "2.6.0", "language": "zh_CN", "platform": "iOS", "windowWidth": "390.0", "model": "iPhone 12", "screenWidth": "390.0" }
  185. }
  186. // 关闭当前页面
  187. if (['closePageAction', 'closePage'].includes(obj.command)) {
  188. window.close()
  189. }
  190. // 返回上一个页面
  191. if (['backOrClose', 'gobackAction'].includes(obj.command)) {
  192. window.go(-1)
  193. }
  194. // 实名
  195. if (obj.command == 'startRealName') {
  196. alert('实名需要到 真实的原生页面才能实现')
  197. callbackData.data = true
  198. }
  199. // 调用原生拍照功能
  200. if (obj.command == 'routerService') {
  201. alert('调用原生测气血 真实的原生页面才能实现')
  202. callbackData.data = true
  203. }
  204. // 进入系统设置的泰生活通知设置页
  205. if (obj.command == 'openMessageSettings') {
  206. alert('模拟进入系统设置的泰生活通知设置页 成功')
  207. callbackData.data = true
  208. }
  209. // 通过跳转h5调取原生支付
  210. if (obj.command == 'pushH5pay') {
  211. alert('通过跳转h5调取原生支付 真实的原生页面才能实现')
  212. callbackData.data = true
  213. }
  214. //打开新页面
  215. if (obj.command == 'startWebPage') {
  216. callbackData.data = true
  217. window.open(obj.parameter.url)
  218. }
  219. //查看pdf
  220. if (obj.command == 'showPDF') {
  221. callbackData.data = true
  222. window.open(obj.parameter.url)
  223. }
  224. // 下载
  225. if (obj.command == 'downloadHealthFile') {
  226. callbackData.data = true
  227. alert('模拟downloadHealthFile下载完成')
  228. }
  229. // 下载pdf
  230. if (obj.command == 'downloadHealthFileV2') {
  231. callbackData.data = true
  232. alert('模拟downloadHealthFileV2下载完成')
  233. }
  234. // 处理原生url:startAppPage
  235. if (obj.command == 'startAppPage') {
  236. callbackData.data = true
  237. alert('模拟 startAppPage 完成')
  238. }
  239. // 处理原生URL:startHome
  240. if (obj.command == 'startHome') {
  241. callbackData.data = true
  242. alert('模拟 startHome 完成')
  243. }
  244. // 扫码
  245. if (obj.command == 'QRCodeScanService' || obj.command == 'scanService') {
  246. var QRCodeScanServiceStr = window.prompt("返回获取视频自动播放设置:", ' {"result": "https://www.baidu.com","code":"0"}');
  247. callbackData = JSON.parse(QRCodeScanServiceStr)
  248. }
  249. // 选择图片
  250. if (obj.command == 'chooseImage' || obj.command == 'toCamera' || obj.command == 'toPhotoAlbum') {
  251. callbackData = { "data": { "localIds": ["tfile://tmp_3AE31B0E957CA6965E2AC7C395579A74.jpeg"], "localFiles": [{ "size": 1045078, "type": "image/jpeg", "orientation": "right", "width": 3024, "height": 4032, "localId": "tfile://tmp_3AE31B0E957CA6965E2AC7C395579A74.jpeg" }] }, "code": 0 }
  252. }
  253. // 选择PDF
  254. if (obj.command == 'chooseFilePDF' || obj.command == 'healthAddPDFFile') {
  255. callbackData = { "data": { "fileSize": 38975, "fileName": "pdf小.pdf", "state": "success", "filePath": "tfile://tmp_A290B1C31DB887A3D7E21C4830C2CBBF.pdf" }, "code": 0 }
  256. }
  257. // 上传返回
  258. if (obj.command == 'uploadFile') {
  259. // pdf 链接
  260. if (obj.parameter.filePath.indexOf('pdf') > -1) {
  261. var pdfCallBack = window.prompt("上传的结果,默认直接点确认:", '{ "data": { "code": "2000", "status": null, "data": { "limitFileUrl": "https://cloudhospital.taikang.com/cloudhospital/storage/file/get?fileId=Sm12cit2c1MrTnV3V0NoTllqSEFSU1E3T0UxeG8wNFp3eHdhUTVqeFF5Rmg0VUtObFd4bDROL3AvVlJiQXNGVw==@TL", "fileId": "3486e4b2db944db281c9fdba705f9c78", "fileUrl": "https://cloudhospital.taikang.com/cloudhospital/storage/file/get?fileId=3486e4b2db944db281c9fdba705f9c78", "fileRepoEntity": { "suffix": "pdf", "storageCode": "common", "format": null, "limitFileUrl": null, "size": "38.06KB", "storageChannel": "qingStor", "type": "image", "storageKey": "3272d97e-d36e-49c7-92b6-2c55465a726b", "name": "ecd9faa74cdd406cbaf08f32cbd83783.pdf", "fileUrl": null }, "fileRepo": { "suffix": "pdf", "storageCode": "common", "id": "3486e4b2db944db281c9fdba705f9c78", "size": "38.06KB", "storageChannel": "qingStor", "storageKey": "3272d97e-d36e-49c7-92b6-2c55465a726b", "type": "image", "createTime": 1733109323000, "name": "ecd9faa74cdd406cbaf08f32cbd83783.pdf" } }, "msg": "success" }, "statusCode": 0 }');
  262. callbackData = JSON.parse(pdfCallBack)
  263. } else {
  264. // 图片 链接
  265. var picCallBack = window.prompt("上传的结果,默认直接点确认", '{ "data": { "code": "2000", "status": null, "data": { "limitFileUrl": "https://cloudhospital.taikang.com/cloudhospital/storage/file/get?fileId=RlBOMFNnVFFmU1JOR3Ywd0RVWFlsZjB0cjNSVnRkcVNRaXJrS2FweElvRTFyOXllTmx0OFRvQ3pvRTZ3Ulg2Sw==@TL", "fileId": "6cd9b92d5c9f4315be8a706e648dd35d", "fileUrl": "https://cloudhospital.taikang.com/cloudhospital/storage/file/get?fileId=6cd9b92d5c9f4315be8a706e648dd35d", "fileRepoEntity": { "suffix": "jpeg", "storageCode": "common", "format": null, "limitFileUrl": null, "size": "1020.58KB", "storageChannel": "qingStor", "type": "image", "storageKey": "272caff4-e30c-4795-b6b5-f784c75f58e2", "name": "76a3b65335dd42b7a323b5507681d7cc.jpeg", "fileUrl": null }, "fileRepo": { "suffix": "jpeg", "storageCode": "common", "id": "6cd9b92d5c9f4315be8a706e648dd35d", "size": "1020.58KB", "storageChannel": "qingStor", "storageKey": "272caff4-e30c-4795-b6b5-f784c75f58e2", "type": "image", "createTime": 1733108862000, "name": "76a3b65335dd42b7a323b5507681d7cc.jpeg" } }, "msg": "success" }, "statusCode": 0 }');
  266. callbackData = JSON.parse(picCallBack)
  267. }
  268.  
  269. }
  270. // 保存base64到本地
  271. if (obj.command == 'saveBitmapToLocal') {
  272. alert('模拟下载完成')
  273. callbackData.data = true
  274. }
  275. // 保存图片
  276. if (obj.command == 'saveImageToPhotosAlbum') {
  277. alert('模拟下载完成')
  278. callbackData.data = true
  279. }
  280. // 打开小应用
  281. if (obj.command == 'startV2MiniProgram') {
  282. alert('模拟打开小应用- startV2MiniProgram 成功')
  283. callbackData.data = true
  284. }
  285. // 打电话
  286. if (obj.command == 'makePhoneCall') {
  287. alert('模拟打电话-makePhoneCall 成功')
  288. callbackData.data = true
  289. }
  290. // 打开视频房间
  291. if (obj.command == 'startVideoRoom') {
  292. alert('模拟打开视频房间-startVideoRoom 成功')
  293. callbackData.data = true
  294. }
  295. // 分享
  296. if (obj.command == 'onMenuShare') {
  297. alert('模拟onMenuShare - 分享 成功')
  298. callbackData.data = true
  299. }
  300. // 弹窗
  301. if (obj.command == 'showModal') {
  302. alert('模拟showModal - 弹窗 成功')
  303. callbackData.data = true
  304. }
  305. // IMuploadfile 发送选取的图片到IM聊天中
  306. if (obj.command == 'IMuploadfile') {
  307. var IMuploadfileCallBack = window.prompt('IMuploadfile的回调', '{"code":0,"data":{"result": "success"}}')
  308. callbackData = JSON.parse(IMuploadfileCallBack)
  309. }
  310. // checkAppAuthor 获取原生权限接口
  311. if (obj.command == 'checkAppAuthor' || obj.command == 'openAppSomeAuthors') {
  312. var auths = obj.parameter.auths || obj.parameter.nativeParams.auths || []
  313. let authsObj = {}
  314. auths.forEach(element => {
  315. authsObj[element] = true
  316. });
  317. callbackData.data = authsObj
  318. }
  319. // 定位
  320. if (obj.command == 'getLocation' || obj.command == 'GPSService') {
  321. var locationStr = window.prompt("定位信息返回,默认直接点确认:", '{"result":"1","data":{"district":"洪山区","city":"武汉市","longitude":"114.498154","formattedAddress":"湖北省武汉市洪山区花城北路靠近花山生态湿地公园","country":"中国","latitude":"30.561561","province":"湖北省"}}');
  322. callbackData = JSON.parse(locationStr)
  323. }
  324. // 血氧
  325. if (obj.command == 'bloodDetect') {
  326. var bloodDetectStr = window.prompt("返回血氧,默认直接点确认:", '{"oxygen":90 ,"bpm": 80}');
  327. callbackData = JSON.parse(bloodDetectStr)
  328. }
  329. // 朗读
  330. if (obj.command == 'readText') {
  331. alert('模拟 readText - 朗读 成功')
  332. callbackData.data = true
  333. }
  334. // 终止朗读
  335. if (obj.command == 'stopReadText') {
  336. alert('模拟 stopReadText - 终止朗读 成功')
  337. callbackData.data = true
  338. }
  339. // 在线问诊评价弹窗,参数写死的,去千语评价
  340. if (obj.command == 'showRatingAlert') {
  341. alert('模拟 showRatingAlert 在线问诊评价弹窗,参数写死的,去千语评价 成功')
  342. callbackData.data = true
  343. }
  344. // 是否登录 token
  345. if (obj.command == 'isUserLogin') {
  346. callbackData.data = { result: token ? 1 : 0 }
  347. }
  348. // 设置缓存数据
  349. if (obj.command == 'setStorage') {
  350. callbackData.data = window.setStorage(obj.parameter.key, obj.parameter.data)
  351. }
  352. // 获取缓存数据
  353. if (obj.command == 'getStorage') {
  354. callbackData.data = window.getStorage(obj.parameter.key)
  355. }
  356. // 返回app配置的服务器地址和运营平台地址
  357. if (obj.command == 'getServerUrl') {
  358. var getServerUrlStr = window.prompt("返回app配置的服务器地址和运营平台地址,默认直接点确认:", '{"data":{"errMsg":"getServerUrl:ok","serverUrl":"http://tklifetest.mobile.taikang.com/","operationUrl":"https://medicaluat.mobile.taikang.com/active/"},"code":"0"}');
  359. callbackData = JSON.parse(getServerUrlStr)
  360. }
  361. // 返回网络连接类型
  362. if (obj.command == 'getNetworkType') {
  363. var getNetworkTypeStr = window.prompt("返回app配置的服务器地址和运营平台地址,默认直接点确认:", '{"networkType":"mobile"}');
  364. callbackData = JSON.parse(getNetworkTypeStr)
  365. }
  366. // OCR验证
  367. if (obj.command == 'miniOCRService') {
  368. var miniOCRServiceStr = window.prompt("返回aOCR验证-miniOCRService:", '{"startTime":"2019-10-08","endTime":"2039-10-08","imageInfo":{"type":"jpeg","filePath":"tfile://tmp_C519xxxxxxxxxx","company":"北京公安局","base64Str":"xxxxxxxxxxxxxxxxxxxxx"}}');
  369. callbackData = JSON.parse(miniOCRServiceStr)
  370. }
  371. // 跳转特殊容器
  372. if (obj.command == 'openSpecialWebviewV2' || obj.command == 'openSpecialWebview') {
  373. alert('模拟 openSpecialWebviewV2 跳转特殊容器 成功')
  374. callbackData.data = true
  375. }
  376. // toTKdoctor
  377. if (obj.command == 'toTKdoctor') {
  378. alert('模拟 toTKdoctor 成功')
  379. callbackData.data = true
  380. }
  381.  
  382. // startIMVoice
  383. if (obj.command == 'startIMVoice') {
  384. alert('模拟 startIMVoice 成功')
  385. callbackData.data = true
  386. }
  387.  
  388. // insertCalendar
  389. if (obj.command == 'insertCalendar') {
  390. alert('模拟 insertCalendar 成功')
  391. callbackData.data = true
  392. }
  393. // 暂停、恢复语音合成(文字转语音)
  394. if (obj.command == 'pauseReadText' || obj.command == 'resumeReadText') {
  395. alert('模拟 pauseReadText || resumeReadText 暂停、恢复语音合成(文字转语音) 成功')
  396. callbackData.data = true
  397. }
  398. // mapServiceNew 跳转地图详情页面
  399. if (obj.command == 'mapServiceNew') {
  400. alert('模拟 mapServiceNew 跳转地图详情页面 成功')
  401. callbackData.data = true
  402. }
  403. // 分享微信小程序
  404. if (obj.command == 'shareWXMiniProgramService') {
  405. alert('模拟 shareWXMiniProgramService 分享微信小程序 成功')
  406. callbackData.data = true
  407. }
  408. // 分享URL 卡片独立交互
  409. if (obj.command == 'directShareUrl') {
  410. alert('模拟 directShareUrl 分享URL 卡片独立交互 成功')
  411. callbackData.data = true
  412. }
  413. // 微信分享纯文本
  414. if (obj.command == 'shareTextToWXService' || obj.command == 'shareTextToWXServiceV2') {
  415. alert('模拟 shareTextToWXService 微信分享纯文本 成功')
  416. callbackData.data = true
  417. }
  418. // 分享图片
  419. if (obj.command == 'directShareImg') {
  420. alert('模拟 directShareImg 分享图片 成功')
  421. callbackData.data = true
  422. }
  423. // 退出登录
  424. if (obj.command == 'loginOutService') {
  425. alert('模拟 loginOutService 退出登录 成功')
  426. callbackData.data = true
  427. }
  428. // 分享(调起分享面板)
  429. if (obj.command == 'shareAction') {
  430. alert('模拟 shareAction 分享(调起分享面板) 成功')
  431. callbackData.data = true
  432. }
  433.  
  434. // 跳转手机设置
  435. if (obj.command == 'openAppAuthorV2' || obj.command == 'openAppAuthor') {
  436. alert('模拟 openAppAuthorV2 跳转手机设置 成功')
  437. callbackData.data = true
  438. }
  439. // 查询周边Okase
  440. if (obj.command == 'scanDrugBox' || obj.command == 'scanDrugBoxV2') {
  441. var scanDrugBoxStr = window.prompt("返回查询周边Okase:", '{"code":"0","data":"HEXString"}');
  442. callbackData = JSON.parse(scanDrugBoxStr)
  443. }
  444. // 操作cgm血糖仪
  445. if (obj.command == 'cgmAction' || obj.command == 'cgmActionV2') {
  446. var cgmActionStr = window.prompt("返回操作cgm血糖仪:", '{"code":"0","data":""}');
  447. callbackData = JSON.parse(cgmActionStr)
  448. }
  449. // 获取用户手机号
  450. if (obj.command == 'getUserMobile' || obj.command == 'getUserMobileV2') {
  451. var getUserMobileStr = window.prompt("返回获取用户手机号:", '{"countryCode":"86","userMobile":"189****7976"}');
  452. callbackData = JSON.parse(getUserMobileStr)
  453. }
  454. // 获取用户姓名
  455. if (obj.command == 'userNameService' || obj.command == 'userNameServiceV2') {
  456. var userNameServiceStr = window.prompt("返回获取用户姓名:", '{"userName":"张先生"}');
  457. callbackData = JSON.parse(userNameServiceStr)
  458. }
  459.  
  460. // 获取用户今日步数
  461. if (obj.command == 'getTodayRunData' || obj.command == 'getTodayRunDataV2') {
  462. var currentDate = formatDate(new Date(), 'yyyy-MM-dd');
  463. var getTodayRunDataStr = window.prompt("返回获取用户今日步数:", `{"step":2133,"date": "${currentDate}"}`);
  464. callbackData = JSON.parse(getTodayRunDataStr)
  465. }
  466. // 获取用户人脸数据
  467. if (obj.command == 'faceDetectService' || obj.command == 'faceDetectServiceV2') {
  468. var faceDetectServiceStr = window.prompt("返回获取用户人脸数据:", ' {"detectCode": 1}');
  469. callbackData = JSON.parse(faceDetectServiceStr)
  470. }
  471. // 获取视频自动播放设置
  472. if (obj.command == 'getVideoAutoPlay') {
  473. var getVideoAutoPlayStr = window.prompt("返回获取视频自动播放设置:", ' {"status": "1","code":"0"}');
  474. callbackData = JSON.parse(getVideoAutoPlayStr)
  475. }
  476. // 获取通知开关状态
  477. if (obj.command == 'getNotificationsEnabled') {
  478. var getNotificationsEnabledStr = window.prompt("返回获取通知开关状态:", ' {"enabled": "1","code":"0"}');
  479. callbackData = JSON.parse(getNotificationsEnabledStr)
  480. }
  481. // 保存pdf到手机相册
  482. if (obj.command == 'downloadPDF') {
  483. var downloadPDFStr = window.prompt("返回保存pdf到手机相册:", ' {"result": "success","code":"0"}');
  484. callbackData = JSON.parse(downloadPDFStr)
  485. }
  486. // 开启消息提醒弹窗
  487. if (obj.command == 'userPushAlertAction') {
  488. var userPushAlertActionStr = window.prompt("返回开启消息提醒弹窗:", ' { "event": "showOpenNotificationDialog", "status": "ok" }');
  489. callbackData = JSON.parse(userPushAlertActionStr)
  490. }
  491. // 获取设备指纹
  492. if (obj.command == 'getDeviceSecurityToken') {
  493. var getDeviceSecurityTokenStr = window.prompt("返回获取设备指纹:", '{"data":{"securityToken":"6WOyEy6Hhq2BQo/4Xv69WKgQhd/d5I7QdNNdUQfwxMbRXiiB0TI0hKwqEF5hWJihsCn0GF2MrdQx9zl8UeQVPh+KoOdzZe1ZRvckkyop5NLc6/z7w0gclA=="},"code":0}');
  494. callbackData = JSON.parse(getDeviceSecurityTokenStr)
  495. }
  496. // 从本地获取图片信息
  497. if (obj.command == 'getChooseImageMsg') {
  498. var getChooseImageMsgStr = window.prompt("返回从本地获取图片信息:", '{"data":{"localIds":["tfile://tmp_389164E761C5473131B0F81FBBAABF6A.jpeg"],"localFiles":[{"size":447599,"type":"image/jpeg","orientation":"up","width":721,"height":1280,"localId":"tfile://tmp_389164E761C5473131B0F81FBBAABF6A.jpeg"}]},"code":0}{"data":{"localIds":["tfile://tmp_389164E761C5473131B0F81FBBAABF6A.jpeg"],"localFiles":[{"size":447599,"type":"image/jpeg","orientation":"up","width":721,"height":1280,"localId":"tfile://tmp_389164E761C5473131B0F81FBBAABF6A.jpeg"}]},"code":0}');
  499. callbackData = JSON.parse(getChooseImageMsgStr)
  500. }
  501. // 从本地获取视频信息
  502. if (obj.command == 'getChooseVideoMsg') {
  503. var getChooseVideoMsgStr = window.prompt("返回从本地获取视频信息:", '{"code":0,"data":{"size":5658069,"duration":5.295,"width":888,"height":1920,"localId":"tfile://tmp_AF605A10CEC96D1115FC64B3602B27D1.mp4"}}');
  504. callbackData = JSON.parse(getChooseVideoMsgStr)
  505. }
  506.  
  507.  
  508.  
  509.  
  510. //执行回调
  511. setTimeout(() => {
  512.  
  513. // 以下不用处理
  514. if (!['getChooseImageMsg', 'getServerUrl', 'uploadFile'].includes(obj.command)) {
  515. // 有些人写的项目 没有处理数据是放到 data中还是直接返回的 比如 原生有些返回{code:1, data:{name:'zs'}} 有些返回{code:1,name:'zs'} (健康这边统一方法有处理,有data返回data,没有直接返回。) 为了兼容某些没处理的项目
  516. if (callbackData.data && Object.prototype.toString.call(callbackData.data) === "[object Object]") {
  517. callbackData = { ...callbackData, ...callbackData.data }
  518. }
  519. }
  520.  
  521. console.log(`%c ${obj.command} - 模拟原生返回的值是:%o`, 'background-color:#0f0;color:#f00;font-size:20px;', callbackData)
  522. var callbackJSON = JSON.stringify(callbackData)
  523.  
  524. if (obj.callback && window[obj.callback]) {
  525. window[obj.callback](callbackJSON)
  526. } else if (obj.command && window[obj.command]) {
  527. window[obj.command](callbackJSON)
  528. }
  529. }, 200);
  530.  
  531. }
  532. }
  533.  
  534. }
  535. }
  536. //formatDate(currentDate, 'yyyy-MM-dd HH:mm:ss');
  537. function formatDate (date, format) {
  538. if (!(date instanceof Date)) {
  539. if (typeof date === 'number') {
  540. date = new Date(date);
  541. } else {
  542. throw new Error('输入的参数不是有效的Date对象或时间戳');
  543. }
  544. }
  545.  
  546. const year = date.getFullYear();
  547. const month = (date.getMonth() + 1).toString().padStart(2, '0');
  548. const day = date.getDate().toString().padStart(2, '0');
  549. const hours = date.getHours().toString().padStart(2, '0');
  550. const minutes = date.getMinutes().toString().padStart(2, '0');
  551. const seconds = date.getSeconds().toString().padStart(2, '0');
  552.  
  553. return format
  554. .replace('yyyy', year)
  555. .replace('MM', month)
  556. .replace('dd', day)
  557. .replace('HH', hours)
  558. .replace('mm', minutes)
  559. .replace('ss', seconds);
  560. }
  561. // 获取token
  562. function getToken () {
  563. return new Promise((resolve, reject) => {
  564. // 线上直接返回即可
  565. if (['tlifehealth.taikang.com', 'operation.mobile.taikang.com', 'operation.taikang.com', 'tklife.mobile.taikang.com', 'tshmall.wanyuhengtong.com', 'point.taikang.com'].includes(location.hostname)) {
  566. let token = '' // 这里需要自己 找后端去 日志 里拿token
  567. !token && alert("没有线上token")
  568. return resolve(token)
  569. }
  570.  
  571.  
  572. // 模拟手机号
  573. var mobile = window.prompt("请输入需要获取token的手机号:", "18031359654");
  574. // 假设你有一个JSON对象
  575. const jsonData = {
  576. "verifyCode": "123456",
  577. "mobile": mobile,
  578. "deviceId": "111",
  579. "deviceType": "1"
  580. };
  581. // 将JSON对象转换为字符串
  582. const jsonString = JSON.stringify(jsonData);
  583. // 使用fetch发送POST请求,包含JSON数据
  584. fetch('https://tklifetest.mobile.taikang.com/users/login/v2', {
  585. method: 'POST', // 指定请求方法
  586. headers: {
  587. 'Content-Type': 'application/json' // 设置请求头为JSON格式
  588. },
  589. body: jsonString // 将JSON字符串作为请求体
  590. }).then(response => {
  591. if (response.ok) {
  592. return response.json(); // 如果响应成功,解析JSON响应
  593. }
  594. throw new Error('Network response was not ok.'); // 如果响应不成功,抛出错误
  595. }).then(r => {
  596. if (r.code == 0) {
  597. resolve(r.data.token)
  598. } else {
  599. console.log(r)
  600. reject(r)
  601. }
  602. }).catch(error => console.error('There has been a problem with your fetch operation:', error)); // 捕获错误
  603. })
  604. }
  605.  
  606. // 某些原生进入页面就会执行的方法
  607. setTimeout(() => {
  608. window.webviewDidFinishLoading && window.webviewDidFinishLoading()
  609. window.onGetCgmHistroy && window.onGetCgmHistroy()
  610. window.updateSeviveStatus && window.updateSeviveStatus()
  611. document.addEventListener("visibilitychange", function () {
  612. if (document.visibilityState === "visible") {
  613. window.onResume && window.onResume()
  614. window.onAppEnterForeground && window.onAppEnterForeground()
  615. } else {
  616. window.onAppEnterBackground && window.onAppEnterBackground()
  617. }
  618. });
  619. }, 1000);
  620. }
  621. })();