我对nexous测试(用android 2.2编译)表明,当通过window.location.href重定向页面时,不会触发shouldOverrideUrlLoading。 onPageFinished像往常一样触发。
有人可以建议如何拦截javascript页面重定向吗? 在javascript中重定向页面的任何其他方式,所以shouldOverrideUrlLoading被触发? 这是shouldOverrideUrlLoading的错误吗?
谢谢,
六月
答案 0 :(得分:1)
就我而言,在我的网页中使用window.location = "http://xxx"
时,不会触发事件shouldOverrideUrlLoading()
。
但是,如果我使用自定义网址方案或协议(例如androidurl://
),则会触发shouldOverrideUrlLoading()
。我的解决方法是使用自定义协议,并在shouldOverrideUrlLoading()
方法中添加以下代码:
if (url.startsWith("androidurl://")) {
url = url.replaceAll("androidurl://", "http://");
}
这会将自定义协议更改回http://
协议,您可以从那里处理正确的网址。
这适合我。
答案 1 :(得分:0)
有人可以建议如何拦截javascript页面重定向吗?
通过WebView
修改Javascript以调用您注入addJavascriptInterface()
的某个对象的方法。
这是否是shouldOverrideUrlLoading的错误?
可能。这当然是一个限制。
答案 2 :(得分:0)
也许您可以使用 WebChromeClient 的 onJsBeforeUnload() 拦截您所关注的事件离开当前页面。覆盖 onJsBeforeUnload()并将标志设置为 true 。
然后使用 WebViewClient 的 onLoadResource() 拦截要加载的网址。如果flag为 true ,请执行您想要的任何操作,例如在另一个 Intent 中打开URL;否则什么都不做。
另外,请记住添加到您的HTML:
<script> window.onbeforeunload = function(){
return "Leave?";
}; </script>