2013-07-30 15 views
7

Mój widok WWW nie wywołuje funkcji javascript, która zwraca ostrzeżenie, jak poniżej. Czy ktoś może zasugerować, jak pozbyć się poniższego ostrzeżenia.Metody WebView nie są wywoływane w Androidzie

07-30 10:15:44.031: W/webview_proxy(3770): java.lang.Throwable: Warning: A WebView method was called on thread 'WebViewCoreThread'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.

Poniżej jest moja funkcja.

public boolean onLongClick(View v){ 
    System.out.println("dfdsf"); 
    // Tell the javascript to handle this if not in selection mode 
    //if(!this.isInSelectionMode()){ 
     this.getSettings().setJavaScriptEnabled(true); 
     this.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
     this.getSettings().setPluginsEnabled(true); 
     this.loadUrl("javascript:android.selection.longTouch();"); 
     mScrolling = true; 
     //this.setJavaScriptEnabled(true); 
    //} 


    // Don't let the webview handle it 
    return true; 
} 

Odpowiedz

6

Ostrzeganie mówi ci wszystko. Wywołujesz metody webview bezpośrednio. Oznacza to, że dzwonisz do WebViewCoreThread. Musisz zadzwonić do nich w wątku UI, co oznacza w Aktywności, która korzysta z tej webview.

odczuwalna:

WebView wv = (WebView)findViewById(id); 
wv.setJavaScriptEnabled(true); 
wv.setJavaScriptCanOpenWindowsAutomatically(true); 
wv.setPluginsEnabled(true); 
wv.loadUrl("javascript:android.selection.longTouch();"); 
+0

Czy to samo dotyczy problemu, gdybym wywołał dowolne metody WebView w AsyncTask, to nie zadziała? –

+0

To jest akceptowana odpowiedź i nie widzę setJavaScriptEnabled() lub innych metod dla instancji WebView. – seema

+0

Domyślam się, że korzystasz z nowszej wersji Androida. Ten post został opublikowany na Androida 2.3.3. Nie jestem pewien. W nowszych wersjach należy użyć następującego kodu: 'wv.getSettings(). SetJavaScriptEnabled (true)'. Mam nadzieję, że to rozwiązuje twój problem – ZeusNet

2

Zastosowanie Kod ten ja myśli będzie pracować dla ciebie, to i modyfikowane w zależności od potrzeb ##

private WebView webView; 


    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.web); 

     webView = (WebView) findViewById(R.id.web_view); 
     webView.setInitialScale(1); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.getSettings().setLoadWithOverviewMode(true); 
     webView.getSettings().setUseWideViewPort(true); 
     webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
     webView.setScrollbarFadingEnabled(false); 
     webView.loadUrl("http://www.youtube.com"); 

    } 

} 
0

onLongClick jest członkiem WebView?

Wygląda na to, że nie można wywołać wszystkich metod WebView w wątku "WebViewCoreThread".

Możesz użyć handler'a, wysłać msg do handler'a onLongClick, a następnie wywołać metody WebView w swoim module obsługi.

0

Myślę, że musisz wykonać swój kod metody onLongClick w runOnUIThread() lub używając Handler, to ostrzeżenie jest spowodowane użyciem tego wszystkiego w wątku roboczym.

15

Jako ostrzeżenie mówi się, że wywołujesz metody wyświetlania w Internecie w WebViewCoreThread. zatem zmodyfikować kod tak,

public boolean onLongClick(View v){ 
    YourActivity.this.runOnUiThread(new Runnable() { 
     public void run() { 
      this.getSettings().setJavaScriptEnabled(true); 
      this.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
      this.getSettings().setPluginsEnabled(true); 
      this.loadUrl("javascript:android.selection.longTouch();"); 
      mScrolling = true; 
     } 
    }); 
} 
0

można użyć WebView poprzez Runnable. Nie musisz korzystać z aktywności.

webView.post(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      getSettings().setJavaScriptEnabled(true); 
      getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
      getSettings().setPluginsEnabled(true); 
      loadUrl("javascript:android.selection.longTouch();"); 
      mScrolling = true; 
     } 
    });