吴小邪
吴小邪
  • 发布:2017-11-01 14:18
  • 更新:2020-06-11 16:03
  • 阅读:3803

【报Bug】用webview加载网页,网页中使用了h5 pushState加载新的URL,webview.getUrl()方法无法获得加载后的url

分类:5+ SDK

[内容]使用webview加载网页,html网页中使用了js ajax刷新了URL,webview.getUrl()方法无法获得刷新后的url。具体是html5+的history.pushState方法,操作浏览器历史,并且用了ajax的异步加载页面方法,但是网页没有真正的刷新,是的webview.getUrl()方法,获取的地址还是加载页面前的url。目前已知的页面有爱奇艺移动版,芒果TV移动版。

重现步骤

[步骤]使用webview open页面(http://m.iqiyi.com/v_19rrkwkj54.html#30-26-15-7),使用listener loaded监听,再次点击下方的其它集,监听到了地址变化,但是getUrl方法获取的地址还是第一次打开的地址。

[结果]webview.getUrl()方法获取的地址还是第一次打开的地址,

[期望]获取到加载后的当前url地址

运行环境

[系统版本]win10

[浏览器版本]手机真机调试

[IDE版本]HBuilder 8.8.0.201706142254

[mui版本]Mui v3.7.0

附件
[代码片段]
var ws=null,embed=null,url=null,embIqiyiMain=null;

function plusReady(){

plus.webview.currentWebview().setStyle({scrollIndicator:'none'});

ws=plus.webview.currentWebview();

embIqiyiMain = plus.webview.create('http://m.iqiyi.com/v_19rrkwkj54.html#30-26-15-7', 'embIqiyiMain', {top:'64px',bottom:'0px'});

embIqiyiMain.addEventListener('loaded', function(e){

//url = location.href;

console.log("loaded event,current url:"+url);

}, false);

ws.append(embIqiyiMain);

}

if(window.plus){

plusReady();
}else{
document.addEventListener('plusready',plusReady,false);
}

2017-11-01 14:18 负责人:无 分享
已邀请:
第七十三天至

第七十三天至

优酷(https://m.youku.com)也是这样 ,请问你现在解决了吗?

第七十三天至

第七十三天至

我发现使用loading或者loaded执行的函数会带要跳转的url,但是运行时会发现并不是每一次都会执行loading或者loaded;同样的使用listenResourceLoading和overrideUrlLoading也能获取到url参数,但问题是listenResourceLoading和overrideUrlLoading并不会每次都生效

第七十三天至

第七十三天至

同样的代码运行起来结果往往是wobj.addEventListener( event, listener, capture )添加的监听有些执行,有些并没有执行

第七十三天至

第七十三天至

已解决

  • 9***@qq.com

    请问如何解决的啊大神

    2019-12-12 18:04

  • 第七十三天至

    回复 9***@qq.com: 第一种方法使用location;第二种使用listenResourceLoading监听包含有src的资源

    2019-12-13 17:34

  • 3***@qq.com

    请问如何使用location,mui不是不能直接调用location吗?在document内location.href确实是最新的url,你们知道mui中webview是怎样得到url的,如何更新url的?

    2020-06-10 21:22

  • 第七十三天至

    回复 3***@qq.com: mui不能使用5+api吗?

    2020-06-11 15:58

第七十三天至

第七十三天至

  1. 在外面设置一个定时器,定时获取 url ;注入js,plus.storage.setItem(key,location.href);
  2. 新建一个webview,拦截所有跳转;注入js用webview加载url,在拦截回调里有url。

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