WebView browser;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
browser = (WebView) findViewById(R.id.webve);
browser.getSettings().setJavaScriptEnabled(true);
browser.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
browser.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url)
{
browser.loadUrl("javascript:window.HTMLOUT.showHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
}
});
browser.loadUrl("http://www.google.com");
}
final Context myApp = this;
Builder builder;
String content_html;
class MyJavaScriptInterface
{
@SuppressWarnings("unused")
public void showHTML(String html)
{
builder = new AlertDialog.Builder(myApp);
builder.setTitle("HTML")
.setMessage(html)
.setPositiveButton(android.R.string.ok, null)
.setCancelable(false)
.create()
.show();
content_html = html;
Log.i("html", html+" ");
}
}
此代码在Android 2.2中正常工作,但无法正常使用android 2.3及以上版本...给出下面显示的错误消息..
12-19 14:53:33.786: W/dalvikvm(452): JNI WARNING: jarray 0x40543998 points to non-array object (Ljava/lang/String;)
12-19 14:53:33.831: I/dalvikvm(452): "WebViewCoreThread" prio=5 tid=9 NATIVE
12-19 14:53:33.838: I/dalvikvm(452): | group="main" sCount=0 dsCount=0 obj=0x4051e198 self=0x29b650
12-19 14:53:33.838: I/dalvikvm(452): | sysTid=460 nice=0 sched=0/0 cgrp=default handle=2733960
12-19 14:53:33.858: I/dalvikvm(452): | schedstat=( 2873090555 2669702962 182 )
12-19 14:53:33.878: I/dalvikvm(452): at android.webkit.BrowserFrame.stringByEvaluatingJavaScriptFromString(Native Method)
12-19 14:53:33.885: I/dalvikvm(452): at android.webkit.BrowserFrame.stringByEvaluatingJavaScriptFromString(Native Method)
12-19 14:53:33.905: I/dalvikvm(452): at android.webkit.BrowserFrame.loadUrl(BrowserFrame.java:246)
12-19 14:53:33.924: I/dalvikvm(452): at android.webkit.WebViewCore.loadUrl(WebViewCore.java:1570)
12-19 14:53:33.924: I/dalvikvm(452): at android.webkit.WebViewCore.access$1400(WebViewCore.java:53)
12-19 14:53:33.934: I/dalvikvm(452): at android.webkit.WebViewCore$EventHub$1.handleMessage(WebViewCore.java:956)
12-19 14:53:33.955: I/dalvikvm(452): at android.os.Handler.dispatchMessage(Handler.java:99)
12-19 14:53:33.955: I/dalvikvm(452): at android.os.Looper.loop(Looper.java:130)
12-19 14:53:33.955: I/dalvikvm(452): at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:629)
12-19 14:53:33.955: I/dalvikvm(452): at java.lang.Thread.run(Thread.java:1019)
12-19 14:53:33.964: E/dalvikvm(452): VM aborting
答案 0 :(得分:2)
Jason Shah解释了this post中的所有内容:
处理Android 2.3 WebView破坏的AddJavascriptInterface
(对于这个技术主题,请向我的普通读者道歉。)
Google Android团队发布了Android 2.3(“Gingerbread”)SDK 两天前,大张旗鼓地说。这已经发送了科技博客世界 像往常一样,陷入出版狂潮。但是,潜在的 灾难性的bug已经浮出水面,可能会导致成千上万的崩溃 打开应用程序后立即在Android电子市场中打开应用程序。
问题在这里简明扼要地描述: http://code.google.com/p/android/issues/detail?id=12987简而言之:很多 应用程序使用嵌入式WebView显示其全部或部分UI 呈现HTML。这些WebViews使用了一个很棒的功能 JavaScript(在HTML中)到“环绕”的本机Java代码 的WebView。这个桥在Android 2.3中完全破解。尝试去 甚至一个基本的调用立即打破WebView并崩溃 应用
我相信Android团队的成员都知道这个问题,并且 从早期报道来看,它并不影响Nexus S(第一款Android 2.3手机)。但是,这并不能帮助我们这些反对模拟器的人。