[問題] 請問webview與javascript溝通

看板AndroidDev作者 (阿耀要不要)時間13年前 (2012/07/03 10:21), 編輯推噓2(203)
留言5則, 3人參與, 最新討論串1/1
最近要寫一段程式 主要是要從網站上撈某個值出來 查到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

07/03 13:06, , 1F
先去研究DOM吧
07/03 13:06, 1F

07/03 14:55, , 2F
好像沒辦法直接來.....
07/03 14:55, 2F
※ 編輯: nightwolf013 來自: 59.120.192.224 (07/03 15:10) ※ 編輯: nightwolf013 來自: 59.120.192.224 (07/03 15:46)

07/03 20:22, , 3F
沒辦法,就好像iOS沒辦法用jsinterface一樣
07/03 20:22, 3F

07/03 20:24, , 4F
應該說cocoa有對應的windowscriptobject 但是ios沒有
07/03 20:24, 4F

07/03 20:24, , 5F
所以osx能寫 ios不能
07/03 20:24, 5F
※ 編輯: nightwolf013 來自: 59.120.192.224 (07/04 11:41)
文章代碼(AID): #1FybSSfV (AndroidDev)