此代码在Android2.2中正常工作,但在Android2.3及以上版本中不工作
Jason Shah解释了以下内容: 处理Android2.3WebView损坏的AddJavascriptInterface (对于这个技术主题,我提前向我的普通读者道歉。) 谷歌安卓团队发布了安卓2.3(“姜饼”)SDK 两天前,大张旗鼓地说。这让科技博客界大吃一惊 像往常一样,陷入出版狂潮。然而,一个潜在的 灾难性的错误已经浮出水面,可能会导致成千上万的计算机崩溃 Android Market中的应用程序在打开应用程序后立即出现 这里简要描述了该问题: 简言之:很多 应用程序显示其全部或部分用户界面,其中嵌入的网络视图可以 呈现HTML。这些Web视图利用了一个很好的特性,可以架起一座桥梁 JavaScript(在HTML中)转换为“围绕” 网络视图。Android 2.3完全打破了这座桥。试图 即使是一个基本的调用,也会立即中断WebView并使网络崩溃 应用程序 我相信Android团队的成员已经意识到了这个问题 从早期的报道来看,它并不影响Nexus S(第一款Android系统) 2.3电话)。然而,这并不能真正帮助我们这些对抗模拟器的人此代码在Android2.2中正常工作,但在Android2.3及以上版本中不工作,android,android-webview,Android,Android Webview,Jason Shah解释了以下内容: 处理Android2.3WebView损坏的AddJavascriptInterface (对于这个技术主题,我提前向我的普通读者道歉。) 谷歌安卓团队发布了安卓2.3(“姜饼”)SDK 两天前,大张旗鼓地说。这让科技博客界大吃一惊 像往常一样,陷入出版狂潮。然而,一个潜在的 灾难性的错误已经浮出水面,可能会导致成千上万的计算机崩溃 Android Market中的应用程序在打开应用程序后立即出现 这里简要描述了该问题: 简言之:很多 应用程序显示其全部或部
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+" ");
}
}
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