diff --git a/hybrid/html/local.html b/hybrid/html/local.html index 4ee55135027c56b17ec1fbd596d0f51733289b8f..a42893deae2c99ab4335e2d452834c6c22a0d0f0 100644 --- a/hybrid/html/local.html +++ b/hybrid/html/local.html @@ -38,6 +38,7 @@ +

网页向应用发送消息。注意:小程序端应用会在此页面后退时接收到消息。

@@ -68,6 +69,13 @@ delta: 1 }); break; + case 'getEnv': + uni.getEnv((res) => { + uni.postMessage({ + data: res + }) + }); + break; default: uni[action]({ url: '/pages/component/button/button' diff --git a/hybrid/html/uni.webview.1.5.5.js b/hybrid/html/uni.webview.1.5.5.js index f10bbdb019926d6eafea6b2fd69b769f3fadcd1c..2c9b9808ec94367ef18a7b445ddf201eac3d546f 100644 --- a/hybrid/html/uni.webview.1.5.5.js +++ b/hybrid/html/uni.webview.1.5.5.js @@ -1 +1 @@ -!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e=e||self).uni=n()}(this,(function(){"use strict";try{var e={};Object.defineProperty(e,"passive",{get:function(){!0}}),window.addEventListener("test-passive",null,e)}catch(e){}var n=Object.prototype.hasOwnProperty;function i(e,i){return n.call(e,i)}var t=[];function o(){return window.__dcloud_weex_postMessage||window.__dcloud_weex_}var a=function(e,n){var i={options:{timestamp:+new Date},name:e,arg:n};if(window.__uniapp_x_postMessage||window.__uniapp_x_){if("postMessage"===e){var a={data:n};return window.__uniapp_x_postMessage?window.__uniapp_x_postMessage(a):window.__uniapp_x_.postMessage(JSON.stringify(a))}var r={type:"WEB_INVOKE_APPSERVICE",args:{data:i,webviewIds:t}};window.__uniapp_x_postMessage?window.__uniapp_x_postMessageToService(r):window.__uniapp_x_.postMessageToService(JSON.stringify(r))}else if(o()){if("postMessage"===e){var d={data:[n]};return window.__dcloud_weex_postMessage?window.__dcloud_weex_postMessage(d):window.__dcloud_weex_.postMessage(JSON.stringify(d))}var s={type:"WEB_INVOKE_APPSERVICE",args:{data:i,webviewIds:t}};window.__dcloud_weex_postMessage?window.__dcloud_weex_postMessageToService(s):window.__dcloud_weex_.postMessageToService(JSON.stringify(s))}else{if(!window.plus)return window.parent.postMessage({type:"WEB_INVOKE_APPSERVICE",data:i,pageId:""},"*");if(0===t.length){var w=plus.webview.currentWebview();if(!w)throw new Error("plus.webview.currentWebview() is undefined");var u=w.parent(),g="";g=u?u.id:w.id,t.push(g)}if(plus.webview.getWebviewById("__uniapp__service"))plus.webview.postMessageToUniNView({type:"WEB_INVOKE_APPSERVICE",args:{data:i,webviewIds:t}},"__uniapp__service");else{var v=JSON.stringify(i);plus.webview.getLaunchWebview().evalJS('UniPlusBridge.subscribeHandler("'.concat("WEB_INVOKE_APPSERVICE",'",').concat(v,",").concat(JSON.stringify(t),");"))}}},r={navigateTo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;a("navigateTo",{url:encodeURI(n)})},navigateBack:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.delta;a("navigateBack",{delta:parseInt(n)||1})},switchTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;a("switchTab",{url:encodeURI(n)})},reLaunch:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;a("reLaunch",{url:encodeURI(n)})},redirectTo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;a("redirectTo",{url:encodeURI(n)})},getEnv:function(e){o()?e({nvue:!0}):window.plus?e({plus:!0}):e({h5:!0})},postMessage:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};a("postMessage",e.data||{})}},d=/uni-app/i.test(navigator.userAgent),s=/Html5Plus/i.test(navigator.userAgent),w=/complete|loaded|interactive/;var u=window.my&&navigator.userAgent.indexOf(["t","n","e","i","l","C","y","a","p","i","l","A"].reverse().join(""))>-1;var g=window.swan&&window.swan.webView&&/swan/i.test(navigator.userAgent);var v=window.qq&&window.qq.miniProgram&&/QQ/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var c=window.tt&&window.tt.miniProgram&&/toutiaomicroapp/i.test(navigator.userAgent);var p=window.wx&&window.wx.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var _=window.qa&&/quickapp/i.test(navigator.userAgent);var m=window.ks&&window.ks.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var f=window.tt&&window.tt.miniProgram&&/Lark|Feishu/i.test(navigator.userAgent);var l=window.jd&&window.jd.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var E=window.xhs&&window.xhs.miniProgram&&/xhsminiapp/i.test(navigator.userAgent);for(var x,S=function(){window.UniAppJSBridge=!0,document.dispatchEvent(new CustomEvent("UniAppJSBridgeReady",{bubbles:!0,cancelable:!0}))},h=[function(e){if(d||s)return window.__uniapp_x_postMessage||window.__uniapp_x_||window.__dcloud_weex_postMessage||window.__dcloud_weex_?document.addEventListener("DOMContentLoaded",e):window.plus&&w.test(document.readyState)?setTimeout(e,0):document.addEventListener("plusready",e),r},function(e){if(p)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.wx.miniProgram},function(e){if(v)return window.QQJSBridge&&window.QQJSBridge.invoke?setTimeout(e,0):document.addEventListener("QQJSBridgeReady",e),window.qq.miniProgram},function(e){if(u){document.addEventListener("DOMContentLoaded",e);var n=window.my;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(g)return document.addEventListener("DOMContentLoaded",e),window.swan.webView},function(e){if(c)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(_){window.QaJSBridge&&window.QaJSBridge.invoke?setTimeout(e,0):document.addEventListener("QaJSBridgeReady",e);var n=window.qa;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(m)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.ks.miniProgram},function(e){if(f)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(l)return window.JDJSBridgeReady&&window.JDJSBridgeReady.invoke?setTimeout(e,0):document.addEventListener("JDJSBridgeReady",e),window.jd.miniProgram},function(e){if(E)return window.xhs.miniProgram},function(e){return document.addEventListener("DOMContentLoaded",e),r}],y=0;y0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("navigateTo",{url:encodeURI(n)})},navigateBack:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.delta;r("navigateBack",{delta:parseInt(n)||1})},switchTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("switchTab",{url:encodeURI(n)})},reLaunch:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("reLaunch",{url:encodeURI(n)})},redirectTo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("redirectTo",{url:encodeURI(n)})},getEnv:function(e){a()?e({uvue:!0}):o()?e({nvue:!0}):window.plus?e({plus:!0}):e({h5:!0})},postMessage:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r("postMessage",e.data||{})}},s=/uni-app/i.test(navigator.userAgent),w=/Html5Plus/i.test(navigator.userAgent),u=/complete|loaded|interactive/;var g=window.my&&navigator.userAgent.indexOf(["t","n","e","i","l","C","y","a","p","i","l","A"].reverse().join(""))>-1;var v=window.swan&&window.swan.webView&&/swan/i.test(navigator.userAgent);var c=window.qq&&window.qq.miniProgram&&/QQ/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var p=window.tt&&window.tt.miniProgram&&/toutiaomicroapp/i.test(navigator.userAgent);var _=window.wx&&window.wx.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var m=window.qa&&/quickapp/i.test(navigator.userAgent);var f=window.ks&&window.ks.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var l=window.tt&&window.tt.miniProgram&&/Lark|Feishu/i.test(navigator.userAgent);var E=window.jd&&window.jd.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var x=window.xhs&&window.xhs.miniProgram&&/xhsminiapp/i.test(navigator.userAgent);for(var S,h=function(){window.UniAppJSBridge=!0,document.dispatchEvent(new CustomEvent("UniAppJSBridgeReady",{bubbles:!0,cancelable:!0}))},y=[function(e){if(s||w)return window.__uniapp_x_postMessage||window.__uniapp_x_||window.__dcloud_weex_postMessage||window.__dcloud_weex_?document.addEventListener("DOMContentLoaded",e):window.plus&&u.test(document.readyState)?setTimeout(e,0):document.addEventListener("plusready",e),d},function(e){if(_)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.wx.miniProgram},function(e){if(c)return window.QQJSBridge&&window.QQJSBridge.invoke?setTimeout(e,0):document.addEventListener("QQJSBridgeReady",e),window.qq.miniProgram},function(e){if(g){document.addEventListener("DOMContentLoaded",e);var n=window.my;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(v)return document.addEventListener("DOMContentLoaded",e),window.swan.webView},function(e){if(p)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(m){window.QaJSBridge&&window.QaJSBridge.invoke?setTimeout(e,0):document.addEventListener("QaJSBridgeReady",e);var n=window.qa;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(f)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.ks.miniProgram},function(e){if(l)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(E)return window.JDJSBridgeReady&&window.JDJSBridgeReady.invoke?setTimeout(e,0):document.addEventListener("JDJSBridgeReady",e),window.jd.miniProgram},function(e){if(x)return window.xhs.miniProgram},function(e){return document.addEventListener("DOMContentLoaded",e),d}],M=0;M/pages/API/storage/storage.test.js"], + testMatch: ["/pages/**/*test.[jt]s?(x)"], testPathIgnorePatterns: ['/node_modules/'], setupFilesAfterEnv: ['/jest-setup.js'], } diff --git a/pages/API/page-scroll-to/page-scroll-to.test.js b/pages/API/page-scroll-to/page-scroll-to.test.js index 5a3c1be8b35fa86eb0098927021eb7b788278ab7..c579d4483b9292a6376aaa2336745c9387e5a425 100644 --- a/pages/API/page-scroll-to/page-scroll-to.test.js +++ b/pages/API/page-scroll-to/page-scroll-to.test.js @@ -13,7 +13,9 @@ describe('page-scroll-to', () => { await page.waitFor(300) const scrollTop = await page.scrollTop() - expect(scrollTop).toBe(100) + + // 设备精度问题,允许上下浮动 1px + expect(scrollTop > 99 && scrollTop < 101).toBe(true) }) it('scroll-to-element', async () => { const btnScrollTo = await page.$('.btn-scrollToElement') @@ -25,4 +27,4 @@ describe('page-scroll-to', () => { const offset = await scrollToElement.offset() expect(offset.top >= 1188).toBe(true) }) -}) +}) \ No newline at end of file diff --git a/pages/API/storage/storage.test.js b/pages/API/storage/storage.test.js index 86b330671b6eac9a1515dfc5d1add934c5974ecc..d50ec89d1c65ac73bf18628eb2dc9f5467b793d9 100644 --- a/pages/API/storage/storage.test.js +++ b/pages/API/storage/storage.test.js @@ -32,6 +32,23 @@ describe('ExtApi-StorageInfoTest', () => { await page.waitFor(600) expect(await getData('apiGetData')).toEqual("长安大道连狭斜,青牛白马七香车。玉辇纵横过主第,金鞭络绎向侯家。龙衔宝盖承朝日,凤吐流苏带晚霞。百尺游丝争绕树,一群娇鸟共啼花。游蜂戏蝶千门侧,碧树银台万种色。复道交窗作合欢,双阙连甍垂凤翼。") + // 测试 clear + let btnGetStorageInfoASyncButton = await page.$('.btn-getStorageInfoASync') + await btnGetStorageInfoASyncButton.tap() + await page.waitFor(600) + storageInfoRet = await getData('apiGetData') + expect(storageInfoRet.keys[0]).toEqual("autotest_key_mock") + + const btnClearStorageInfoASyncButton = await page.$('.btn-clearStorageInfoASync') + await btnClearStorageInfoASyncButton.tap() + page.waitFor(600) + + await btnGetStorageInfoASyncButton.tap() + await page.waitFor(600) + storageInfoRet = await getData('apiGetData') + expect(storageInfoRet.keys.length).toEqual(0) + + await page.setData({ key: "autotest_key_mock", data:1100.8989 @@ -43,6 +60,23 @@ describe('ExtApi-StorageInfoTest', () => { await page.waitFor(600) expect(await getData('apiGetData')).toEqual(1100.8989) + + // 测试 remove + await btnGetStorageInfoASyncButton.tap() + await page.waitFor(600) + storageInfoRet = await getData('apiGetData') + expect(storageInfoRet.keys[0]).toEqual("autotest_key_mock") + + const btnRemoveStorageInfoASyncButton = await page.$('.btn-removeStorageInfoASync') + await btnRemoveStorageInfoASyncButton.tap() + page.waitFor(600) + + await btnGetStorageInfoASyncButton.tap() + await page.waitFor(600) + storageInfoRet = await getData('apiGetData') + expect(storageInfoRet.keys.length).toEqual(0) + + await page.setData({ key: "autotest_key_mock", data:123456789 @@ -71,16 +105,20 @@ describe('ExtApi-StorageInfoTest', () => { await page.setData({ key: "autotest_key_mock", - data:"长安大道连狭斜,青牛白马七香车。玉辇纵横过主第,金鞭络绎向侯家。龙衔宝盖承朝日,凤吐流苏带晚霞。百尺游丝争绕树,一群娇鸟共啼花。游蜂戏蝶千门侧,碧树银台万种色。复道交窗作合欢,双阙连甍垂凤翼。" + data:{ + name:"zhangsan", + age:122 + } }) await page.waitFor(600) - const btnSetStorageButtonInfo2 = await page.$('.btn-setstorageSync') - await btnSetStorageButtonInfo2.tap() + await btnSetStorageButtonInfo.tap() await page.waitFor(600) - const btnGetStorageButtonInfo2 = await page.$('.btn-getstorageSync') - await btnGetStorageButtonInfo2.tap() + await btnGetStorageButtonInfo.tap() await page.waitFor(600) - expect(await getData('apiGetData')).toEqual("长安大道连狭斜,青牛白马七香车。玉辇纵横过主第,金鞭络绎向侯家。龙衔宝盖承朝日,凤吐流苏带晚霞。百尺游丝争绕树,一群娇鸟共啼花。游蜂戏蝶千门侧,碧树银台万种色。复道交窗作合欢,双阙连甍垂凤翼。") + let objRet = await getData('apiGetData') + expect(objRet.age).toEqual(122) + + }); @@ -93,14 +131,95 @@ describe('ExtApi-StorageInfoTest', () => { data:"长安大道连狭斜,青牛白马七香车。玉辇纵横过主第,金鞭络绎向侯家。龙衔宝盖承朝日,凤吐流苏带晚霞。百尺游丝争绕树,一群娇鸟共啼花。游蜂戏蝶千门侧,碧树银台万种色。复道交窗作合欢,双阙连甍垂凤翼。" }) await page.waitFor(600) - const btnSetStorageButtonInfo = await page.$('.btn-setstorageSync') + let btnSetStorageButtonInfo = await page.$('.btn-setstorageSync') await btnSetStorageButtonInfo.tap() await page.waitFor(600) - const btnGetStorageButtonInfo = await page.$('.btn-getstorageSync') + let btnGetStorageButtonInfo = await page.$('.btn-getstorageSync') await btnGetStorageButtonInfo.tap() await page.waitFor(600) expect(await getData('apiGetData')).toEqual("长安大道连狭斜,青牛白马七香车。玉辇纵横过主第,金鞭络绎向侯家。龙衔宝盖承朝日,凤吐流苏带晚霞。百尺游丝争绕树,一群娇鸟共啼花。游蜂戏蝶千门侧,碧树银台万种色。复道交窗作合欢,双阙连甍垂凤翼。") + // 测试clear + const btnGetStorageInfoSyncButton = await page.$('.btn-getStorageInfoSync') + await btnGetStorageInfoSyncButton.tap() + await page.waitFor(600) + let storageInfoRet = await getData('apiGetData') + expect(storageInfoRet.keys[0]).toEqual("autotest_key_mock") + + + const btnClearStorageInfoSyncButton = await page.$('.btn-clearStorageInfoSync') + await btnClearStorageInfoSyncButton.tap() + + await btnGetStorageInfoSyncButton.tap() + await page.waitFor(600) + storageInfoRet = await getData('apiGetData') + expect(storageInfoRet.keys.length).toEqual(0) + + + await page.setData({ + key: "autotest_key_mock", + data:12345789.235689 + }) + await page.waitFor(600) + btnSetStorageButtonInfo = await page.$('.btn-setstorageSync') + await btnSetStorageButtonInfo.tap() + await page.waitFor(600) + btnGetStorageButtonInfo = await page.$('.btn-getstorageSync') + await btnGetStorageButtonInfo.tap() + await page.waitFor(600) + expect(await getData('apiGetData')).toEqual(12345789.235689) + + + // 测试 remove + await btnGetStorageInfoSyncButton.tap() + await page.waitFor(600) + storageInfoRet = await getData('apiGetData') + expect(storageInfoRet.keys[0]).toEqual("autotest_key_mock") + + const btnRemoveStorageInfoSyncButton = await page.$('.btn-removeStorageInfoSync') + await btnRemoveStorageInfoSyncButton.tap() + page.waitFor(600) + + await btnGetStorageInfoSyncButton.tap() + await page.waitFor(600) + storageInfoRet = await getData('apiGetData') + expect(storageInfoRet.keys.length).toEqual(0) + + await page.setData({ + key: "autotest_key_mock", + data:0 + }) + await page.waitFor(600) + btnSetStorageButtonInfo = await page.$('.btn-setstorageSync') + await btnSetStorageButtonInfo.tap() + await page.waitFor(600) + btnGetStorageButtonInfo = await page.$('.btn-getstorageSync') + await btnGetStorageButtonInfo.tap() + await page.waitFor(600) + expect(await getData('apiGetData')).toEqual(0) + + + + await page.setData({ + key: "autotest_key_mock", + data:{ + name:"tom", + age:10 + } + }) + await page.waitFor(600) + btnSetStorageButtonInfo = await page.$('.btn-setstorageSync') + await btnSetStorageButtonInfo.tap() + await page.waitFor(600) + btnGetStorageButtonInfo = await page.$('.btn-getstorageSync') + await btnGetStorageButtonInfo.tap() + await page.waitFor(600) + let objRet = await getData('apiGetData') + expect(objRet.name).toEqual("tom") + + + + }); - + }); diff --git a/pages/API/storage/storage.uvue b/pages/API/storage/storage.uvue index c6a229ff1ee345402397eb26b3f8a10265bb9145..862ec4f98ad1937b642827e57f484c243ab71578 100644 --- a/pages/API/storage/storage.uvue +++ b/pages/API/storage/storage.uvue @@ -39,12 +39,12 @@ - - + {{ storageInfo }} @@ -90,8 +90,8 @@ 存储数据-异步 - - + + @@ -103,10 +103,10 @@ 存储数据-同步 - - @@ -131,15 +131,17 @@ export default { methods: { getStorageInfo() { uni.getStorageInfo({ - success: function (res) { + success: function (res) { + this.apiGetData = res this.storageInfo = JSON.stringify(res) }, }) }, getStorageInfoSync() { try { - const res = uni.getStorageInfoSync() - this.storageInfo = JSON.stringify(res) + const res = uni.getStorageInfoSync() + this.apiGetData = res + this.storageInfo = JSON.stringify(res) } catch (e) { // error console.log(e) @@ -195,10 +197,18 @@ export default { uni.getStorage({ key: key, success: (res) => { - that.apiGetData = res.data + that.apiGetData = res.data + + let desc:string = typeof this.apiGetData + if("object" == desc){ + desc = desc + ": " + JSON.stringify(this.apiGetData) + }else{ + desc = desc + ": " + this.apiGetData + } + uni.showModal({ title: '读取数据成功', - content: "data: '" + JSON.stringify(that.apiGetData) + "'", + content: desc, showCancel: false, }) }, @@ -221,10 +231,18 @@ export default { showCancel: false, }) } else { - this.apiGetData = uni.getStorageSync(key) + this.apiGetData = uni.getStorageSync(key) + + let desc:string = typeof this.apiGetData + if("object" == desc){ + desc = desc + ": " + JSON.stringify(this.apiGetData) + }else{ + desc = desc + ": " + this.apiGetData + } + uni.showModal({ title: '读取数据成功', - content: "data: '" + JSON.stringify(apiGetData) + "'", + content: desc, showCancel: false, }) } diff --git a/pages/component/scroll-view/scroll-view-props.uvue b/pages/component/scroll-view/scroll-view-props.uvue index 4c1090ce1396f9f03ce1f15990633a15cfb774f1..ca58afda7a595f27f99948b1e9a95280e19d5149 100644 --- a/pages/component/scroll-view/scroll-view-props.uvue +++ b/pages/component/scroll-view/scroll-view-props.uvue @@ -7,7 +7,7 @@