2011-03-31 381 views
4

我测试了一个nexous one(使用android 2.2编译)显示当通过window.location.href重定向页面时,不会触发shouldOverrideUrlLoading。 onPageFinished像往常一样触发。window.location.href javascript不会触发shouldOverrideUrlLoading

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

感谢,

回答

0

谁能告诉我如何截取的JavaScript重定向页面?

修改Javascript以调用您通过addJavascriptInterface()注入WebView的某些对象的方法。

这是shouldOverrideUrlLoading的错误吗?

可能。这当然是一个限制。

+0

这是一个错误,因为如果你改变location.href,U不要从字面上加载一个URL。因此,通过覆盖这个并处理所有事情,您应该能够确定没有其他URL加载。人们认为WebView只能显示他们自己的页面。但考虑你想呈现远程网站,并不要控制JavaScript的运行... – Nappy 2011-09-21 14:16:00

+0

@CommonsWare你能告诉我,当我加载视图内部的div标签..我只能使用一个index.html和加载其他文件数据到该索引文件的div标签..在这种情况下,我如何获得网址 – 2013-10-10 11:56:35

1

就我而言,在我的网页中使用window.location = "http://xxx"时,事件shouldOverrideUrlLoading()未被触发。

但是,如果我使用自定义url方案或协议如androidurl://,shouldOverrideUrlLoading()被激发。我的解决方法是要使用自定义的协议,并在shouldOverrideUrlLoading()方法中添加以下代码:

if (url.startsWith("androidurl://")) { 
    url = url.replaceAll("androidurl://", "http://"); 
} 

这将改变自定义协议回http://协议,你可以从那里处理正确的URL。

这适用于我。

0

也许你可以使用WebChromeClientonJsBeforeUnload()拦截你即将离开当前页面的情况。覆盖onJsBeforeUnload()并将标志设置为true

然后使用WebViewClientonLoadResource()拦截要加载的URL。如果国旗是true,可以做任何你想要的,例如打开另一个网址意图;否则什么都不做。

另外,记得要添加到您的HTML:

<script> window.onbeforeunload = function(){ 
    return "Leave?"; 
}; </script>