2013-07-30 15 views
7

Meine Web-Ansicht ruft nicht die JavaScript-Funktion, es gibt Warnungen wie folgt zurück. Kann jemand vorschlagen, wie man die folgende Warnung los wird.WebView Methoden wird nicht in android aufgerufen

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.

Unten ist meine Funktion.

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; 
} 

Antwort

6

Die Warnung sagt Ihnen alles. Sie rufen die Webview-Methoden direkt auf. Das bedeutet, dass Sie sie auf WebViewCoreThread aufrufen. Sie müssen sie auf dem UI-Thread aufrufen, dh in der Aktivität, die diese Webansicht verwendet.

Like:

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

Ist es das gleiche Problem, wenn ich irgendwelche WebView-Methoden in AsyncTask aufgerufen habe, dann wird es nicht funktionieren? –

+0

Dies ist eine akzeptierte Antwort und ich kann setJavaScriptEnabled() oder andere Methoden für die WebView-Instanz nicht sehen. – seema

+0

Ich denke du bist auf einer neueren Version von Android. Dieser Beitrag wurde auf Android 2.3.3 veröffentlicht. Ich bin mir überhaupt nicht sicher. In den neueren Versionen müssen Sie den folgenden Code verwenden: 'wv.getSettings(). SetJavaScriptEnabled (true)'. Hoffe das löst dein Problem – ZeusNet

2

Verwendung Dieser Code I denkt, dass es für Sie arbeiten, und sie verändert nach Ihrem Bedarf ##

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 ist Mitglied der Webansicht?

Es scheint, dass Sie nicht alle WebView-Methoden im Thread 'WebViewCoreThread' aufrufen können.

Sie können Handler verwenden, senden Sie msg an Handler in onLongClick, dann rufen Sie WebView-Methoden in Ihrem Handler auf.

0

Ich denke, Sie müssen Ihren Code der onLongClick-Methode in RunOnUIThread() ausführen oder mit Handler, diese Warnung wird verwendet, all dies in einem Worker-Thread.

15

Wie die Warnung sagt, rufen Sie die Webview-Methoden in der WebViewCoreThread. So kann Ihr Code wie folgt ändern,

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

Sie WebView über Runnable verwenden können. Keine Notwendigkeit, Aktivität zu verwenden.

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