2016-11-25 151 views
0

我想通過webview從網站獲取div數據。對不起,我的英語不好。謝謝。Android WebView:從網站獲取html div

我的網站代碼

<html> 
    <div id="test">get this data</div> 
</html> 

我mainactivity

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     String url = "http://website.com"; 
     WebView view = (WebView) this.findViewById(R.id.webView); 
     view.getSettings().setJavaScriptEnabled(true); 
     view.loadUrl(url); 
    } 
} 

回答

0

請使用AsyncTask一個HTTP GET請求您的服務器,那麼一旦你可以在頁面的數據(HTML)作爲一個字符串分析它,並使用RegEx group從中提取您想要的內容。 現在你可以加載,我做這兩個步驟,使用webView.loadData(htmlString, "text/html", "UTF-8")

+0

我想在webview中獲取數據,因爲我有登錄系統。如果用戶登錄到我的網站,我想獲取用戶名。 – brave

+0

@brave,我已經更新了我的答案,請檢查它並讓我知道它是否有效 – Mitchapp

0

那麼在您的webview內容:本機代碼發送請求給JS部分,然後JS數據發送回本地。 爲此,您必須在Native中組織一些JS接口並將其添加到您的「onCreate」中。不是很複雜。這是代碼: JS接口:

public class JavaScriptInterface { 
     Context mContext;   
     private GoogleApiClient client;    
     public JavaScriptInterface(Context c) { 
      mContext = c; 
     } 

     @JavascriptInterface 
     public void getDataFromJs(String divData){ 
      //here is your code 
     } 
} 

現在,你可以把它添加到 「的onCreate」 是這樣的:

public class MainActivity extends AppCompatActivity { 
    public static WebView view; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    String url = "http://website.com"; 
    view = (WebView) this.findViewById(R.id.webView); 
    view.getSettings().setJavaScriptEnabled(true); 
    view.setWebChromeClient(new WebChromeClient()); 
    view.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
    view.getSettings().setBlockNetworkImage(false); 
    view.getSettings().setAllowFileAccess(true); 
    view.getSettings().setAllowFileAccessFromFileURLs(true); 
    view.getSettings().setAllowUniversalAccessFromFileURLs(true);    
    view.addJavascriptInterface(new JavaScriptInterface(this), "Android"); 

    view.loadUrl(url); 
    } 
} 

在這裏,我們給的Android的一個名稱JavaScriptInterface。 然後在本地是合乎邏輯的添加一些功能發送請求(或數據)的JS(你剛剛經過「的onCreate」將其添加到MainActivity類別):

public static String sendToJS(final String inStr, final String address) { 
    final String sendStr = String.format("javascript:%s('%s')", address, inStr.toString()); 
    String response = ""; 
    try { 
     view.post(new Runnable() { 
      @Override 
      public void run() { 
       view.loadUrl(sendStr); 
      } 
     }); 
     response = sendStr; 
    }catch(Exception e){ 
     response = e.getMessage(); 
    } 
    return response; 
} 

而且在JS的解決功能:

function myFunction(inData){ 
    //your code cares about inData if you need it 
    var outData = document.getElementById("test").innerHTML; 
    Android.getDataFromJs(outData); 
} 

最後使用(從母語):

sendToJS("yourStringData", "myFunction"); 

你越來越在JavaScriptInterface在 「getDataFromJs」 方法的答案。 對你有幫助嗎?

+0

謝謝@LeonidZ您可以將您的代碼添加到我的代碼中嗎?因爲我不知道android。謝謝。 – brave

+0

和我看到這個帖子,但不工作http://stackoverflow.com/questions/6034948/get-html-element-from-my-own-web-page-from-a-webview – brave

+0

嗨@LeonidZ你的代碼得到來自webviev的數據?我想在webview中獲取數據,因爲我有登錄系統。我想獲取用戶名,如果用戶登錄到我的網站 – brave