2012-05-26 55 views
1

我用的WebView + addJavascriptInterface控制從一個WebView控件顯示HTML頁面我的應用程序。 它可以在一些API版本上正常工作,但是例如在模擬器中的API 10中它表現錯誤,崩潰中可見WebViewCoreThread。也由用戶在一些真實設備上報告。的WebView + addJavascriptInterface + JavaScript的問題=,WebCore的崩潰

我的HTML看起來像這樣:

<html> 
<head> 
<script type="text/javascript"> 
function hideId(id){ 
    callback.hide(id); 
} 
</script> 
</head> 
<body> 
    <input type="button" value="Hide" onclick="hideId('1');"> 
</body> 
</html> 

這顯示了一個隱藏按鈕,它應該叫回我的Java代碼,它看起來像這樣:

private class JS{ 
    public void hide(String id){ 
     ... some code 
    } 
} 

WebView wv = ... 
wv.addJavascriptInterface(new JS(), "callback"); 
wv.loadURL(...); 

它正常工作在某些設備上,但在提到的API10模擬器上,在按下html按鈕後,logcat顯示錯誤,並且整個WebView變得生病,沒有更多的控件對觸摸做出反應,並且我的JS.hide函數未被調用。

W/dalvikvm(1790): JNI WARNING: jarray 0xb6e1bfd0 points to non-array object (Ljava/lang/String;) 
I/dalvikvm(1790): "WebViewCoreThread" prio=5 tid=10 NATIVE 
I/dalvikvm(1790): | group="main" sCount=0 dsCount=0 obj=0xb6e4f8a0 self=0x8a9c568 
I/dalvikvm(1790): | sysTid=1800 nice=0 sched=0/0 cgrp=[fopen-error:2] handle=145332280 
I/dalvikvm(1790): at android.webkit.WebViewCore.nativeTouchUp(Native Method) 
I/dalvikvm(1790): at android.webkit.WebViewCore.nativeTouchUp(Native Method) 
I/dalvikvm(1790): at android.webkit.WebViewCore.access$3300(WebViewCore.java:53) 
I/dalvikvm(1790): at android.webkit.WebViewCore$EventHub$1.handleMessage(WebViewCore.java:1158) 
I/dalvikvm(1790): at android.os.Handler.dispatchMessage(Handler.java:99) 
I/dalvikvm(1790): at android.os.Looper.loop(Looper.java:130) 
I/dalvikvm(1790): at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:629) 
I/dalvikvm(1790): at java.lang.Thread.run(Thread.java:1019) 
E/dalvikvm(1790): VM aborting 

任何想法這是什麼問題?

+0

它確實看起來不錯。這與我在書中使用的一些示例不同,如:https://github.com/commonsguy/cw-advandroid/tree/master/WebView/GeoWeb1 – CommonsWare

回答

2

我剛剛遇到了這個問題,我自己也發現這是android 2.3的一個已知問題。 http://code.google.com/p/android/issues/detail?id=12987

+0

有用的鏈接,它使我重新設計代碼使用WebViewClient.shouldOverrideUrlLoading代替javascript回調 –

+0

鏈接中提供的解決方案不完全同步。我在下面的評論中提供了一個更好更豐富的修補程序。 – twig