zpzlbww
zpzlbww
  • 发布:2016-01-20 16:43
  • 更新:2018-04-12 10:25
  • 阅读:7722

A.html是主页面,B.html是子页面,在B中用mui.fire给A页面回传值,但是在A页面并没有执行fire中的事件

分类:MUI

A.html是主页面,B.html是子页面,在B中用mui.fire给A页面回传值,但是在A页面并没有执行fire中的事件,不知道是怎么回事?哪位大神给解答一下,谢谢。

A页面如下:

<!DOCTYPE html>  
<html>  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />  
    <title></title>  
    <script src="js/mui.min.js"></script>  
    <link href="css/mui.min.css" rel="stylesheet"/>  
    <style>  
        .button {  
            font-size: 18px;  
            font-weight: normal;  
            text-decoration: none;  
            display: block;  
            text-align: center;  
            overflow:hidden;  
            text-overflow:ellipsis;  
            white-space:nowrap;  
            color: #FFF;  
            background-color: #FFCC33;  
            border: 1px solid #ECB100;  
            padding: .5em 0em;  
            margin: .5em .7em;  
            -webkit-border-radius: 5px;  
            border-radius: 5px;  
        }  
    </style>  
</head>  
<body>  
    <div id="content" class="content">  
        <div class="button" onclick="openPage();">打开B页面</div>  
        <div id="info">输出值</div>  
    </div>  
</body>  
</html>  
<script>  
    mui.init();  
    function openPage(){  
        mui.openWindow({  
            url:'B.html',  
            id:'B'  
        });  
    }  

    window.addEventListener('buttonClick',function(event){            
        var value = event.detail.value;  
        document.getElementById("info").innerText = value;  
    });  
</script>

B页面如下:

<!DOCTYPE html>  
<html>  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />  
    <title></title>  
    <script src="js/mui.min.js"></script>  
    <link href="css/mui.min.css" rel="stylesheet"/>  
    <style>  
        .button {  
            font-size: 18px;  
            font-weight: normal;  
            text-decoration: none;  
            display: block;  
            text-align: center;  
            overflow:hidden;  
            text-overflow:ellipsis;  
            white-space:nowrap;  
            color: #FFF;  
            background-color: #FFCC33;  
            border: 1px solid #ECB100;  
            padding: .5em 0em;  
            margin: .5em .7em;  
            -webkit-border-radius: 5px;  
            border-radius: 5px;  
        }  
    </style>  
</head>  
<body>  
    <div id="content" class="content">  
        <div class="button" onclick="openPage();">打开A页面</div>  
    </div>  
</body>  
</html>  
<script>  
    mui.init();  
    function openPage(){  
        var mainPage = null;  
        if(!mainPage){  
//              mainPage = plus.webview.getWebviewById('A.html');  
            mainPage = plus.webview.currentWebview().parent();  

        }  
        mui.fire(mainPage,"buttonClick",{  
            "value":"100",  
            "name":"hello"  
        });  

        mui.back();  
    }  
</script>
2016-01-20 16:43 负责人:无 分享
已邀请:
DCloud_UNI_FXY

DCloud_UNI_FXY

把mui.back放到timeout里边,延迟百十毫秒执行看看

zpzlbww

zpzlbww (作者)

谢谢回复。这个问题我自己找到解决办法了,就是把

mainPage = plus.webview.currentWebview().parent();

换成

mainPage = plus.webview.currentWebview().opener();

我也不清楚为什么这样就好使了,只能用笨办法就是不停的试各种方法。我从用HBuilder到现在也遇到了大大小小的坑,感觉虽然从Hello mui和Hello H5+这两个样例中学到不少但是真正用起来总是感觉例子还是不够,只能自己摸索或是求助社区,希望各位能做出更多的例子来给我们这些菜鸟用,有时候一个例子可能比说好多话管用

s***@163.com

s***@163.com

如果A页面不是B页面的opener,楼主上面的这个方法就没有用的,更好的办法应该是这样的:
var web = plus.webview.all()[0]; //这个得到的是index.html页面对象
mui.fire(web,"customEvent",{param:附加参数});
这样就能触发index.html页面的自定义事件了。

7***@qq.com

7***@qq.com

因为parent是子页面与父页面的关系,使用append才是这个关系,而openwindow不是子父页面关系,其实就是你触发的webview错了

l***@126.com

l***@126.com

怎么我打开B页面后再打开A页面没反应,这是什么原因??我是用手机浏览器打开测试的,多谢!

该问题目前已经被锁定, 无法添加新回复