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+" ");
        }

    }

Este código funciona correctamente en Android 2.2 pero no funciona con Android 2.3 y superior ... Dando un mensaje de error que se muestra a continuación ...

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
2
mcxxx 19 dic. 2011 a las 19:19

1 respuesta

La mejor respuesta

Jason Shah explica todo en esta publicación:

Manejo de la interfaz AddJavascript rota de Android 2.3 WebView

(Disculpas de antemano a mis lectores habituales por este tema técnico).

El equipo de Google Android lanzó el SDK de Android 2.3 ("Gingerbread") hace dos días, con mucha fanfarria. Esto ha llevado al mundo de los blogs de tecnología a un frenesí editorial, como suele suceder. Sin embargo, ha surgido un error potencialmente desastroso que podría bloquear literalmente miles de aplicaciones en el Android Market inmediatamente después de abrir la aplicación.

El problema se describe sucintamente aquí: http://code.google.com/p/android/issues/detail ? id = 12987 En resumen: muchos Las aplicaciones muestran todo o parte de su IU con WebViews incrustados que pueden renderizar HTML. Esos WebViews hacen uso de una gran característica que une JavaScript (en el HTML) al código Java nativo que "rodea" el WebView. Este puente está completamente roto en Android 2.3. Tratando de hacer incluso una llamada básica interrumpe WebView inmediatamente y bloquea el aplicación.

Creo que los miembros del equipo de Android son conscientes del problema y, según los primeros informes, no afecta al Nexus S (el primer teléfono con Android 2.3). Sin embargo, esto realmente no ayuda a quienes trabajamos contra el emulador.

2
Brad Larson 4 ene. 2012 a las 20:16