2013-07-30 28 views
7

私のWebビューはjavascript関数を呼び出さないため、以下のような警告が返されます。誰でも以下の警告を取り除く方法を提案することができます。以下はWebViewメソッドがアンドロイドで呼び出されていません

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.

私の関数です。

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

答えて

6

警告はあなたにすべてを伝えています。あなたはwebviewメソッドを直接呼び出しています。つまり、WebViewCoreThreadで呼び出すことになります。このWebviewを使用するアクティビティを意味するUIスレッドで呼び出す必要があります。

同様:

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

私はAsyncTaskでWebViewメソッドを呼び出しても機能しないということは同じ問題ですか? –

+0

これは受け入れられた答えで、私はsetJavaScriptEnabled()またはWebViewインスタンスのこれらのメソッドを見ることができません。 – seema

+0

あなたはAndroidの新しいバージョンになっていると思います。この投稿はAndroid 2.3.3で公開されたと思います。私は全く分かりません。新しいバージョンでは、次のコードを使用する必要があります: 'wv.getSettings()。setJavaScriptEnabled(true)'。これがあなたの問題を解決することを願って – ZeusNet

2

このコードを使用私はそれがあなたのために働くだろうと考えて、そしてあなたの必要性に応じて、それを修正##

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は、WebViewののメンバーですか?

スレッド 'WebViewCoreThread'ですべてのWebViewメソッドを呼び出すことはできないようです。

ハンドラを使用して、onLongClickのmsgハンドラを送信してから、ハンドラのWebViewメソッドを呼び出すことができます。

0

runOnUIThread()またはHandlerを使用してonLongClickメソッドのコードを実行する必要があると思いますが、この警告はワーカースレッド上ですべて使用されるためです。

15

警告として、WebViewCoreThreadのwebviewメソッドを呼び出すと言います。 このようにコードを変更してください。

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

WebView via Runnableを使用できます。アクティビティを使用する必要はありません。

関連する問題