我想通过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);
}
}
答案 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中获得的答案。 对你有帮助吗?