2012-04-11 75 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