2011-12-19 2 views
2
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 и выше ... Отдать сообщение об ошибке, отображаемое ниже ..этот код работает правильно в 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 

ответ

2

Джейсон Шах объясняет все в this post:

Handling сломанной AddJavascriptInterface Android 2.3 WebView в

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

Команда Google Android выпустила Android 2,3 («пряник») SDK два дня назад, в фанфары. Это привело к тому, что мировой блог-блог стал публичным безумием, как это обычно бывает. Тем не менее, появилась потенциально опасная ошибка, произошедшая с ошибкой, которая сразу же после открытия приложения может вызвать крах буквально тысячи приложений на Android Market.

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

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

Смежные вопросы