目的:a页面预加载b页面,a页面跳转b页面,a页面使用自定义方法fire,b页面监听a页面自定义方法。
1.a页面预加载b页面。(写在a页面)
mui.init({
//预加载详情页
preloadPages: [{
url: 'b.html',//b页面url路径
id: 'b.html'//b页面id
}]
});
2.a页面跳转b页面 通过某个事件,这里举例tap事件,创建自定义方法,然后执行跳转。(写在a页面)
$("#tab li").on('tap', function() {
var setPage = plus.webview.getWebviewById('b.html');//获取预加载的b页面id
var site = $(this).attr("title");//获取li 里面的title 当做参数如果不需要传参数则不写
mui.fire(setPage, 'moreInfo', {//自定义方法 setPage(获取预加载的a页面id)自定义方法名称为'moreInfo', 'SiteName'(传递的参数)
SiteName: site
});
mui.openWindow({
id: 'b.html',//b页面id
show: {
autoShow: true, //页面loaded事件发生后自动显示,默认为true
aniShow: "slide-in-right"
},
});
})
3.b页面监听a页面自定义方法。(写在b页面)
var siteName ="";
window.addEventListener('moreInfo', function(event) {//moreinfo 监听a页面自定义的方法
siteName = event.detail.SiteName; //获取a页面传递的参数 如果a页面没有传递参数则不需要
//do something... 这里写业务逻辑
});
以下为注意事项:
1.预加载的页面页面关闭的时候不要关闭webview,如果关闭了会导致获取不到预加载b页面的id,所以返回的时候隐藏页面,通过监听mui.back()实现。(写在b页面)
mui.back = function() {
plus.webview.currentWebview().hide("auto", 300); //隐藏当前页面,这里300是隐藏页面的动画时间,单位毫秒,可自定义
}
2.如果在IOS上,触摸屏幕边缘也是可以关闭页面,造成问题同上,所以处理IOS要做以下处理。(写在b页面)
mui.plusReady(function() {
//右滑返回隐藏webview
plus.webview.currentWebview().setStyle({
'popGesture': 'hide'
);
//这里的例子是每次进入都会重新加载数据,所以退出(退出以通过处理改为隐藏hide)需要清空页面加载的数据
var self = plus.webview.currentWebview();
self.addEventListener("hide", function(e) {
//do something... 这里清空加载的数据
}, false)
});