2011-02-26 48 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