这段代码在android 2.2中正常工作但不能正常使用android 2.3及以上版本

时间:2011-12-19 15:19:10

标签: android android-webview

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

1 个答案:

答案 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手机)。但是,这并不能帮助我们这些反对模拟器的人。