2012-04-11 74 views
2

我是Android新手,試圖設置Android Webview來加載JavaScript函數並將結果返回給回調函數。Android WebView - Javascript不會觸發回調函數

見下

public class AWebViewActivity extends Activity { 

    /** 
    * Defines an Interface to call Syntax Highlighting Javascript and return the result 
    * to a string by calling the call back function. 
    */ 
    public class JavaScriptInterface { 
     Context mContext; 
     JavaScriptInterface(Context c) { 
      mContext = c; 
     } 

     //add other interface methods to be called from JavaScript 
     // This annotation is required in Jelly Bean and later: 
     @JavascriptInterface 
     public void receiveValueFromJs(String str) { 
       //do something useful with str 
       Toast.makeText(mContext, "Received Value from JS: " + str,Toast.LENGTH_LONG).show(); 
     } 
    } 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // Try WebView 
     WebView webView = (WebView) findViewById(R.id.editor_view); 
     //webView.setWebChromeClient(new WebChromeClient()); 

     webView.getSettings().setJavaScriptEnabled(true); 

     // RiNxX's suggestion 
     webView.setWebViewClient(new WebViewClient(){ 
      @Override 
      public void onPageFinished(WebView view, String url){ 
       view.loadUrl("javascript:getValue()"); 
      } 
     }); 

     webView.addJavascriptInterface(new JavaScriptInterface(this), "MyAndroid"); 
     webView.loadUrl("file:///mnt/sdcard/a.html"); 

     //SystemClock.sleep(1000); 
     //webView.loadUrl("javascript:getValue()"); 
    } 
} 

下面的代碼的HTML文件中給出:

<html> 
    <head> 
    </head> 
    <body> 
     <script type="text/javascript"> 
      function getValue() 
      { 
       var val="Amith Raravi"; 
       MyAndroid.receiveValueFromJs(val); 
      } 
     </script> 
    Hey ya 
    </body> 
</html> 

我還增加了INTERNET權限的Manifest元素的一個孩子。我瀏覽了StackOverflow上發佈的其他問題,並將腳本移至HTML的正文。

後我加入由RiNxX建議的修改,應用程序關閉(它不執行回調)和我得到下面的警告在logcat的

JNI WARNING: jarray 0x405414e8 points to non-array object (Ljava/lang/String;) 
I/dalvikvm(361): "WebViewCoreThread" prio=5 tid=9 NATIVE 
I/dalvikvm(361): | group="main" sCount=0 dsCount=0 obj=0x4051d580 self=0x29a1a8 
I/dalvikvm(361): | sysTid=370 nice=0 sched=0/0 cgrp=default handle=2728672 
I/dalvikvm(361): | schedstat=(277421205 460097188 88) 
I/dalvikvm(361): at android.webkit.BrowserFrame.stringByEvaluatingJavaScriptFromString(Native Method) 
I/dalvikvm(361): at android.webkit.BrowserFrame.stringByEvaluatingJavaScriptFromString(Native Method) 
I/dalvikvm(361): at android.webkit.BrowserFrame.loadUrl(BrowserFrame.java:246) 
I/dalvikvm(361): at android.webkit.WebViewCore.loadUrl(WebViewCore.java:1570) 
I/dalvikvm(361): at android.webkit.WebViewCore.access$1400(WebViewCore.java:53) 
I/dalvikvm(361): at android.webkit.WebViewCore$EventHub$1.handleMessage(WebViewCore.java:956) 
I/dalvikvm(361): at android.os.Handler.dispatchMessage(Handler.java:99) 
I/dalvikvm(361): at android.os.Looper.loop(Looper.java:123) 
I/dalvikvm(361): at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:629) 
I/dalvikvm(361): at java.lang.Thread.run(Thread.java:1019) 
E/dalvikvm(361): VM aborting 

我一直盯着它過了一天了。任何幫助將是最歡迎:)

+0

發送表單數據後可以得到ajax響應?在webview中從遠程網址 – 2016-04-16 07:19:45

回答

1

添加的WebView客戶端時,頁面加載

webview.setWebViewClient(new WebViewClient() { 
@Override  
public void onPageFinished(WebView view, String url) {  
    view.loadUrl("javascript:getValue()");  
} 
webview.loadUrl(SOME_WEBPAGE); 
+0

構建web頁面顯示感謝您的建議@RiNxX。但我仍然無法得到它的工作:(我已經更新了開放日誌的結果。 – 2012-04-11 11:22:42

+0

只是一個小的更正,'webview.addWebViewClient'應該是'webview.setWebViewClient' – 2012-04-11 11:23:41

0

Java腳本,從機器人的WebView

webView.loadUrl("javascript:setDatePickervalue(\"" 
         + pselSelectedDateProp.getFormatedDate() + "\")"); 


的Java腳本函數

 <script type="text/javascript" language="JavaScript"> 
     function setDatePickervalue(selecteddate){   
       document.getElementById("text").innerHTML = selecteddate.toString();    
       //alert('hello' + selecteddate.toString()); 

      } 
    </script> 

.... 我試圖實現同樣的事情像你那樣叫... 其捐贈我vm中止仿真程序中的異常...但其工作精細的設備上..

2

我是有同樣的問題,但工作正常,當我嘗試從資產加載文件:

webView.loadUrl("file:///android_asset/a.html"); 
+0

可以在發送表單數據後得到ajax響應嗎?form從遠程網址在webview中顯示網頁 – 2016-04-16 07:19:57