этот код работает правильно в Android 2.2, но не работает Android 2.3 и выше - PullRequest
2 голосов
/ 19 декабря 2011
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 Ответ

2 голосов
/ 20 декабря 2011

Джейсон Шах объясняет все в этом посте :

Обработка Android 2.3 WebView не работает AddJavascriptInterface

(заранее извиняюсь перед моими обычными читателями за эту техническую тему.)

Команда Google Android выпустила Android 2.3 ("Gingerbread") SDK два дня назад, с большой помпой.Это привело мир технологического блога в безумие публикации, как это обычно бывает.Однако возникла потенциально катастрофическая ошибка, которая могла вызвать сбой буквально тысяч приложений в Android Market сразу после открытия приложения.

Проблема кратко описана здесь: http://code.google.com/p/android/issues/detail?id=12987 Вкратце: многие приложения показываютполностью или частично их пользовательский интерфейс со встроенными WebView, которые могут отображать HTML.Эти WebViews используют замечательную функцию, которая связывает JavaScript (в HTML) с нативным кодом Java, который «окружает» WebView.Этот мост полностью сломан в Android 2.3.Попытка сделать хотя бы простой вызов немедленно нарушает WebView и приводит к сбою приложения.

Я полагаю, что члены команды Android знают об этой проблеме, и из ранних отчетов она не затрагивает Nexus S (первоеТелефон Android 2.3).Однако это не очень помогает тем из нас, кто работает против эмулятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...