2011-02-26 57 views
1

确定网址的元素,我在显示与网页视图定制活动的HTML。我被压倒从网页流量shouldOverRideUrlLoading

public boolean shouldOverrideUrlLoading(WebView view, String url) { 

拦截某些网址。现在我想能够找出有关该URL周围的HTML的更多细节。

在我来说,我想获得一个包含URL html元素。例如。如果URL来自

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

我希望能够以某种方式从锚标记中检索值“曼弗雷德Moser的”。有没有办法做到这一点。我发现你没有从Java访问DOM。我能想到的

一种方法是单独下载的页面,甚至加载它的WebView前解析这一切。然而,这充其量只是一个丑陋的黑客。有没有更好的办法?

回答

2

有一个肮脏的黑客:

  1. 绑定一些Java对象,以便它可以通过JavaScript调用的WebView:

    addJavascriptInterface(javaObjectExposed, "JSname") 
    
  2. 队由

    现有页面内执行的JavaScript
    WebView.loadUrl("javascript:window.JSname.passData("some data");"); 
    

这里描述:http://lexandera.com/2009/01/extracting-html-from-a-webview/

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

+0

谢谢。我会尽力在下周进行。 – 2011-02-26 00:42:40

+0

它确实是一个肮脏的黑客攻击,但它的工作原理! – 2011-02-28 17:28:46

2

除了@Peter Knego的做法,有逆:

  1. 使用addJavascriptInterface(),按他的步骤#1

  2. 对于你的链接,使用onClick属性您<a>标签在第1步的Java对象上调用一些方法,在该对象中Java对象转向并将URL加载到WebView中,并提供所需的任何类型的标识信息。

只要说,没有办法从shouldOverrideUrlLoading()得到你想要的信息。

+0

我无法控制根本无法加载的网页。那么它会以某种方式仍然有效? – 2011-02-26 00:40:32

+0

@Manfred Moser:不,对不起,在这种情况下,我的行为不起作用。 Knego先生的方法可能会奏效,如果你可以找出一个可以获取数据的“bookmarklet”样式的Javascript代码片段,但这会很棘手。 – CommonsWare 2011-02-26 00:53:12