2016-11-25 20 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

その後、文字列として(HTML)ページのデータをできるようになると、それを解析し、AsyncTaskを使用して、サーバへHTTP GET要求を作成し、 RegEx groupを使用して、そのコンテンツから目的のコンテンツを抽出します。 そして今、あなたはwebView.loadData(htmlString, "text/html", "UTF-8")

+0

私はログインシステムを持っているので、webviewでデータを取得したい。ユーザーが自分のサイトにログインしている場合は、ユーザー名を取得したい – brave

+0

@brave、私は私の答えを更新しました、それをチェックし、それが動作するかどうかお知らせください。 – Mitchapp

0

を使用してwebviewのコンテンツを読み込むことができますまあ、私は2つの段階でこれをやっている:ネイティブコードはJS部分に要求を送信し、その後、JSは、ネイティブにデータを送り返します。 これは、ネイティブでいくつかの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); 
    } 
} 

我々はJavaScriptInterfaceへのAndroidの名前を与えたこれはコードです。 はその後、ネイティブに(あなただけ「のonCreate」の後MainActivityクラスにそれを追加する必要があります)JSへの要求(またはデータ)を送信するいくつかの機能を追加するために論理的な次のようになります。

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"); 

あなたが "getDataFromJs" 方式でJavaScriptInterfaceになっている答え。 あなたにとって有益ですか?

+0

ありがとうございます@LeonidZ私のコードにあなたのコードを追加できますか?私はアンドロイドを知らないので。ありがとう。 – brave

+0

と私はこの投稿を見ましたが、動作しませんhttp://stackoverflow.com/questions/6034948/get-html-element-from-my-own-web-page-from-a-webview – brave

+0

こんにちは@LeonidZ webvievのデータですか?私はログインシステムを持っているので、webviewでデータを取得したい。私はユーザーが私のサイトにログインしている場合はユーザー名を取得したい – brave

関連する問題