2011-12-19 68 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+" "); 
     } 

    } 

這個代碼在機器人2.2正常工作但不工作Android 2.3及以上...給,以下顯示的錯誤信息..這個代碼在機器人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一切:

處理的Android 2.3的WebView破AddJavascriptInterface

(對於這個技術話題,我提前向我的正常讀者道歉)。

兩天前谷歌Android團隊發佈了Android 2.3(「薑餅」)SDK ,聲名狼借。這已經使科技博客世界 變成了一種瘋狂的出版,正如它通常那樣。然而,潛在的 災難性的錯誤已經浮出水面,可以在打開應用程序後馬上在Android Market中成千上萬的應用程序崩潰。

問題描述succintly這裏: http://code.google.com/p/android/issues/detail?id=12987簡而言之:很多 應用中展示他們的UI的部分或全部嵌入網頁視圖,可以 呈現HTML。這些WebView利用了一個很好的功能,它將JavaScript(在HTML中)連接到「圍繞」WebView的本地Java代碼。這個橋樑在Android 2.3中完全破碎。嘗試到 甚至會使基本調用立即中斷WebView並崩潰 應用程序。

我相信,Android團隊成員都意識到了這個問題,並從早期的報告 ,它不影響的Nexus S(第一款Android 2.3 電話)。但是,這並不能真正幫助我們對抗模擬器。

相關問題