今天在使用mui时,发现一些窗口的生命周期的使用困惑
第一个:
我在一个页面上,会播放音乐、视频等,然后点击页面退出之后,还是会保持着播放
感觉是mui缓存了这些webview的引用,没有destory。我需要做一些什么呢?达到真正关闭页面。或者我得在监听退出的动作,然后做一些资源暂停或者释放的动作?
mui.close()好像也无效
第二个:
我目前是通过 openWindow 打开页面。
方法:
jump: function(page, query, appendJson) {
if (isMobile.any) {//如果是移动设备
// var pageUrl = page + (query === undefined ? "" : "?extra=" + encodeURIComponent(JSON.stringify(query)));
var pageUrl = page;
mui.openWindow({
url:pageUrl,
id:pageUrl,
extras:{extras: query},
createNew:true,//是否重复创建同样id的webview,默认为false:不重复创建,直接显示
waiting:{
title:'正在加载...',//等待对话框上显示的提示内容
}
});
} else {
var pageUrl = page + (query === undefined ? "" : "?" + $.param(query));
if (appendJson && query) {//如果不 这么做,会有一些特殊符号导致解析问题
pageUrl += "&extra=" + encodeURIComponent(JSON.stringify(query));
}
console.log("当前参数组成的url是: " + pageUrl);
w.location.href=pageUrl;
}
},
jumpDirectly: function(page, query) {
if (isMobile.any) {//如果是移动设备
var pageUrl = page + (query === undefined ? "" : "?" + query);
console.log("直接传递key-value uRL: " + pageUrl)
mui.openWindow({
url:pageUrl,
id:pageUrl,
extras:{extras: query},
createNew:true,//是否重复创建同样id的webview,默认为false:不重复创建,直接显示
waiting:{
title:'正在加载...',//等待对话框上显示的提示内容
}
});
} else {
var pageUrl = page + (query === undefined ? "" : "?" + query);
console.log("当前参数组成的url是: " + pageUrl);
w.location.href=pageUrl;
}
}
流程如下:
index.html -> navigator.html ,使用的是参数 ?category=sample
然后在navigator.html?category=sample -> detail.html ,使用的是extra参数传递,因为参数太长。
然后在 detail.html点击返回时(没有做任何处理的,mui.back()),发现在 然后在navigator.html的 cateogry值消失了。意味着 只有 navigator.html 的 URL Query信息丢失了。
3 个回复
DCloud_UNI_CHB
1、包含视频/音频的页面,是预加载的吗?
2、detail.html返回后,是如何获得url query的?若你打开navigator.html页面时,可以获得url query,则保存成当前页面变量即可,之后从detail.html返回后,变量依然可用;
GogoCao (作者)
视频的,不是。刚才我测试 了一下,是我退出时,让用户 mui.confirm 了一下,并且根据 confirm的返回结果集用 var result = mui.confirm()对接了。 估计这里是异步执行。导致页面退出了,但是还没有销毁的错觉。现在直接在 confirm里面执行,已经可以关闭声音了。
detail.html 页面中,是直接解析 当前 location.url 得到的 url query 参数。按照你说的方法,我觉得应该是可以走通。因为好像页面没有销毁过(缓存了)。我试试
谢谢。
DCloud_UNI_CHB
extras的参数是不能通过location.url获得的,需要使用plus.webview.currentWebview(). extras获得