作者nightwolf013 (阿耀要不要)
看板AndroidDev
标题[问题] 请问webview与javascript沟通
时间Tue Jul 3 10:21:12 2012
最近要写一段程式
主要是要从网站上捞某个值出来
查到IOS有一种写法是:
self.txtCode.text=[CodeWeb stringByEvaluatingJavaScript
FromString:@"document.getElementById('code').innerHTML"];
可是不知道在android该怎麽样写
才能像这样用一句话就捞出网页上我想要捞的栏位的值呢??
谢谢各位前辈
有查到了一个方式:
webView = new WebView(this);
setContentView(webView);
webView.loadUrl(“
http://veikr.com/wap/ “);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new Handler(), “handler”);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
Toast.makeText(WebViewActivity.this, “网?加?完成”, 0).show();
view.loadUrl(“javascript:window.handler.show(document.body.innerHTML);”);
super.onPageFinished(view, url);
}
});
class Handler {
public void show(String data) {
Toast.makeText(WebViewActivity.this, “?行了handler.show方法”, 0).show();
new AlertDialog.Builder(WebViewActivity.this).setMessage(data).create().show();
}
}
转载处:
http://veikr.com/wap/index-wap2.php?p=192
此范例将"document.body" 改成"document.getElementById('ID')"
就可以捞到值了 在Handler 里的"data"就是要捞的值
不过又有一个新的问题,
小弟目前要是要做从一个网站,取得邮递区号
有四个spinner,
点选完後,会跳出一个zipCode : 12345
(以上这几个spinner是在webview里面控制)
然後点击手机端的button,要将那个12345 传回手机端
一开始尝试过,将document.body改成document.getElementById('ID'),
这样是可以抓到值(试过比如说抓个标题标头之类的);
可是那个zipcode栏位试了一下,一开始是不存在那个栏位
是在选完4个spinner之後才会出现一个栏位,比如说zipcodeId,
选完之後再点击手机端的Button,就会完全没有反应,
不晓得问题是为什麽QQ
=============================================================================
小弟已经解决了,把做法po上来供人参考一下:
如果是照上面讲的,按下button就可以取得特定栏位值,
如果webview里面有spinner的话,会比较麻烦
要加上webview.reload();
不过单单这样会有问题,会有thread跟view的冲突(这部份我也还不太清楚)
所以在button的监听里要改成上:
Base_Activity.runOnUiThread(new Runnable() {
@Override
public void run() {
// refresh ui
webview.reload();
String url="javascript:window.xxx.show(document
.getElementById('ID').innerHTML);";
webview.loadUrl(url);
}
});
这样就可以从网页中取得特定位置的值,并重新读取网页再将新的值取出来了
这个方法不知道正不正确,不过小弟已经完成了,程式码供给有需要的朋友参考^^
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.120.192.224
1F:推 kewang:先去研究DOM吧 07/03 13:06
2F:推 LaPass:好像没办法直接来..... 07/03 14:55
※ 编辑: nightwolf013 来自: 59.120.192.224 (07/03 15:10)
※ 编辑: nightwolf013 来自: 59.120.192.224 (07/03 15:46)
3F:→ Killercat:没办法,就好像iOS没办法用jsinterface一样 07/03 20:22
4F:→ Killercat:应该说cocoa有对应的windowscriptobject 但是ios没有 07/03 20:24
5F:→ Killercat:所以osx能写 ios不能 07/03 20:24
※ 编辑: nightwolf013 来自: 59.120.192.224 (07/04 11:41)