Android WebView - Javascript不会触发回调函数
我是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
我一直盯着它过了一天了。任何帮助将是最欢迎:)
添加的WebView客户端时,页面加载
webview.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:getValue()");
}
webview.loadUrl(SOME_WEBPAGE);
构建web页面显示感谢您的建议@RiNxX。但我仍然无法得到它的工作:(我已经更新了开放日志的结果。 – 2012-04-11 11:22:42
只是一个小的更正,'webview.addWebViewClient'应该是'webview.setWebViewClient' – 2012-04-11 11:23:41
显然调用JavaScript的接口,这已经在2.3.3模拟器一个长期的错误。
请参阅下面的链接。
目前下载2.2和3.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中止仿真程序中的异常...但其工作精细的设备上..
我是有同样的问题,但工作正常,当我尝试从资产加载文件:
webView.loadUrl("file:///android_asset/a.html");
可以在发送表单数据后得到ajax响应吗?form从远程网址在webview中显示网页 – 2016-04-16 07:19:57
发送表单数据后可以得到ajax响应?在webview中从远程网址 – 2016-04-16 07:19:45