在android中没有调用WebView方法

时间:2013-07-30 10:19:52

标签: android methods webview

我的Web视图没有调用它正在返回警告的javascript函数,如下所示。任何人都可以建议如何摆脱以下警告。

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 个答案:

答案 0 :(得分: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;
        }
    });
}

答案 1 :(得分:6)

警告告诉你一切。您正在直接调用webview方法。这意味着您在WebViewCoreThread上调用它们。您必须在UI线程上调用它们,这意味着在使用此webview的Activity中。

像:

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

答案 2 :(得分: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");

    }

}

答案 3 :(得分:0)

onLongClick是webview的成员吗?

似乎你无法在线程'WebViewCoreThread'上调用所有WebView方法。

您可以使用handler,将msg发送到onLongClick中的处理程序,然后在处理程序中调用WebView方法。

答案 4 :(得分:0)

我认为您必须在runOnUIThread()或使用Handler执行onLongClick方法的代码,此警告是由于在工作线程上使用了所有这些。

答案 5 :(得分:0)

您可以通过Runnable使用WebView。无需使用活动。

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