Android WebView:从网站获取html div

时间:2016-11-25 20:41:02

标签: javascript android jquery webview

我想通过webview从网站获取div数据。对不起,我的英语不好。感谢。

我的网站代码

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

我的主要活动

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

2 个答案:

答案 0 :(得分:0)

使用HTTP GET向您的服务器发出AsyncTask请求,然后您可以将该页面的数据(html)作为字符串进行解析,并使用RegEx group从中提取您想要的内容。 现在,您可以使用webview

webView.loadData(htmlString, "text/html", "UTF-8")中加载内容

答案 1 :(得分:0)

好吧,我分两步完成:Native代码向JS部分发送请求,然后JS将数据发送回Native。 为此,您必须在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);
  }
}

这里我们给JavaScriptInterface命名了Android。 然后在Native中可以合理地向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 );
}

最后用法(来自Native):

sendToJS("yourStringData", "myFunction");

您在“getDataFromJs”方法的JavaScriptInterface中获得的答案。 对你有帮助吗?