从webview shouldOverRideUrlLoading确定url的元素

时间:2011-02-26 00:02:53

标签: android webview

我在带有webview的自定义活动中显示html。我压倒一切

public boolean shouldOverrideUrlLoading(WebView view, String url) {

截取某些网址。现在我希望能够找到关于该URL周围的html的更多细节。

在我的情况下,我想获取包含url的html元素。例如。如果网址来自

<a href="http://stackoverflow.com/users/136445/manfred-moser">Manfred Moser</a>

我希望能够以某种方式从锚标签中检索“Manfred Moser”值。有没有办法做到这一点。我发现你无法从Java访问DOM。

我能想到的一种方法是单独下载页面并在将其加载到webview之前解析它们。然而,这是一个丑陋的黑客充其量。还有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

有一个肮脏的黑客:

  1. 绑定一些Java对象,以便可以使用WebView从Javascript调用它:

    addJavascriptInterface(javaObjectExposed, "JSname")
    
  2. 强制执行现有页面中的javascript

    WebView.loadUrl("javascript:window.JSname.passData("some data");"); 
    
  3. 此处描述:http://lexandera.com/2009/01/extracting-html-from-a-webview/

    注意:这是一个安全风险 - 此网页中的任何JS代码都可以访问/调用绑定的Java对象。最好将一些一次性cookie传递给loadUrl()并将它们传回给你的Java对象,以检查它是你的代码进行调用。

答案 1 :(得分:2)

除了@Peter Knego的方法之外,还有相反的方法:

  1. 按照步骤#1

  2. 使用addJavascriptInterface()
  3. 对于您的链接,使用onClick标记上的<a>属性从步骤#1中调出Java对象的某些方法,其中Java对象转向并加载URL进入WebView,并提供您想要的任何类型的识别信息。

  4. 我只想说,无法从shouldOverrideUrlLoading()获取您想要的信息。