7

我的 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;
}
4

6 回答 6

15

正如警告所说,您正在调用WebViewCoreThread. 因此像这样修改你的代码,

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;
        }
    });
}
于 2013-07-30T11:24:51.047 回答
6

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

喜欢:

WebView wv = (WebView)findViewById(id);
wv.setJavaScriptEnabled(true);
wv.setJavaScriptCanOpenWindowsAutomatically(true);
wv.setPluginsEnabled(true);
wv.loadUrl("javascript:android.selection.longTouch();");
于 2013-07-30T10:26:46.893 回答
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");

    }

}
于 2013-07-30T10:28:28.493 回答
0

onLongClick 是 webview 的成员吗?

看来您不能在线程“WebViewCoreThread”上调用所有 WebView 方法。

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

于 2013-07-30T10:30:55.877 回答
0

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

于 2013-07-30T10:31:50.640 回答
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;
        }
    });
于 2016-07-08T12:44:07.453 回答