5***@qq.com
5***@qq.com
  • 发布:2016-12-20 19:01
  • 更新:2016-12-21 10:53
  • 阅读:979

【报Bug】不同的webView取得的currentWebview.id不一样

分类:HTML5+

详细问题描述
currentWebview不是一个全局的变量,而是每个webview局部的变量.

重现步骤
[步骤]
我在一个全局js文件里定时弹出plus.webview.currentWebview().id
访问a页,再从a访问到b页
[结果]
弹出的值为:a,b,a,b,a,b....
[期望]
b,b,b,b,b,b........

如果定义就是每个webview的局部变量,那有什么办法能够获取我当前显示的webview呢?

我对比了一些属性发现无法区别出来
isVisible()全是true
getStyle()都一样,无法区别,比如我所想的display:none和block之类的.

运行环境
ios

附件
function initGa(){
alert(plus.webview.currentWebview().id);
}
var gaInt=window.setInterval("initGa()",3000);

联系方式
QQ 1145567334

2016-12-20 19:01 负责人:无 分享
已邀请:
赵梦欢

赵梦欢 - 专注前端,乐于分享!

看看这篇文章的讲解:https://segmentfault.com/a/1190000005651279

  • 5***@qq.com (作者)

    非常感谢你这么快回复我,这篇文档我已经看过了,我目前是在考虑openWindow,mui-action-back在不改动的前提下,通过全局方法增加我描述的需求(具体业务场景:流量统计) ,如果在不close的前提下,所有的webview都已经是加载完成的,页面切换都不会再重新执行我需要执行的js,所以目前我的思路是每个页定时刷新(10毫秒)去获取当前显示在手机上的webview,当然如果实在没办法从这条路走下去,我就只有考虑在openwindow,mui-action-back上增加监听事件来触发我需要执行的js了。

    2016-12-20 20:11

  • 赵梦欢

    回复 5***@qq.com: 定时刷新这样不是很浪费资源么,新开的webview 可以监听show 和 close这两个事件来实现统计这个整个过程。

    2016-12-20 21:56

  • 5***@qq.com (作者)

    回复 赵梦欢:谢谢,我再试试

    2016-12-20 22:19

  • 5***@qq.com (作者)

    回复 赵梦欢:


    我在index页面增加了如下代码


    mui.plusReady(function() {

    plus.webview.currentWebview().addEventListener('show', function(e){

    alert('index opened');

    }, false);

    });


    我在cart页面增加了如下代码


    mui.plusReady(function() {

    plus.webview.currentWebview().addEventListener('show', function(e){

    alert('cart opened');

    }, false);

    });


    但真机调试的结果为:


    第一次create webview的时候才会弹xxx opened, 而在两个已创建的webview切换的时候,并没有弹.


    求教.

    2016-12-21 10:22

5***@qq.com

5***@qq.com (作者)

我在index页面增加了如下代码

mui.plusReady(function() {
plus.webview.currentWebview().addEventListener('show', function(e){
alert('index opened');
}, false);
});

我在cart页面增加了如下代码

mui.plusReady(function() {
plus.webview.currentWebview().addEventListener('show', function(e){
alert('cart opened');
}, false);
});

但真机调试的结果为:

第一次create webview的时候才会弹xxx opened, 而在两个已创建的webview切换的时候,并没有弹.

求教.

5***@qq.com

5***@qq.com (作者)

已解决.. getTopWebview

chender

chender - 与人为善

不同的webView取得的currentWebview.id当然不一样,一样了那才是bug了
你是不是想获取当前显示的这个webview的id?
这其实不是一个纯粹的问题,比如当前页面上显示了两个webview(一个业务页面由两个webview组成),或者三个(这两个webview外面还有一个template),你希望获取到的是那个webview的id;
所以这个问题你得从你的业务需求上进行描述,比如你是为了做统计,看用户再各个webview上停留的时间,或者是其他的;
要不然大家就会陷入到你所描述的问题里面去,而你描述的东西和问题的本质可能是有差异的;

  • 5***@qq.com (作者)

    非常感谢帮助

    2016-12-21 13:48

  • 5***@qq.com (作者)

    其实我就是在做统计。。。 现在是这样做的。mui.setItem在本地存了一个时间戳(精度毫秒) 然后所有已打开的VIEW页200毫秒一次访问这个时间戳,如果当前时间戳 - 存的时间戳大于200毫秒, 就去检测getTopWebview 如果getTopWebView与我存的上一个webview值不一样,就执行JS代码发统计信息。 不知道有没有更优解。(在所有跳转处,如create,back增加监听这个方法工作量太大了。。。 所以一开始把这个做为第二方案)

    2016-12-21 14:25

  • chender

    让你的所有的业务页面都引用一个公共的js文件,这个js文件里面包括两个功能,重写mui,back和mui.openWindow这两个方法,相当于做个aop,这样在任何一个地方打开webview和关闭webview的时候都能走到你的js代码里面去,比如你可以在你的js代码里面维护一个webview的栈,打开的时候就进栈,关闭的时候就出栈,位于栈顶的就是当前显示的页面,然后另外写一个js服务定时去读这个栈,做时间统计

    2016-12-21 14:34

  • 5***@qq.com (作者)

    恩.非常感谢.

    2016-12-21 16:34

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