window.location.href javascript不会触发shouldOverrideUrlLoading

时间:2011-03-31 15:25:18

标签: android

我对nexous测试(用android 2.2编译)表明,当通过window.location.href重定向页面时,不会触发shouldOverrideUrlLoading。 onPageFinished像往常一样触发。

有人可以建议如何拦截javascript页面重定向吗? 在javascript中重定向页面的任何其他方式,所以shouldOverrideUrlLoading被触发? 这是shouldOverrideUrlLoading的错误吗?

谢谢,

六月

3 个答案:

答案 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>