【问题标题】:WebView Methods is not called in androidandroid中不调用WebView方法
【发布时间】:2013-07-30 10:19:51
【问题描述】:

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

【问题讨论】:

    标签: android methods webview


    【解决方案1】:

    正如警告所说,您正在调用 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;
            }
        });
    }
    

    【讨论】:

      【解决方案2】:

      警告告诉你一切。您正在直接调用 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();");
      

      【讨论】:

      • 如果我在 AsyncTask 中调用任何 WebView 方法,那么问题是否相同?
      • 这是公认的答案,我看不到 setJavaScriptEnabled() 或 WebView 实例的其他这些方法。
      • 我猜您使用的是较新版本的 Android。我认为这篇文章是在 Android 2.3.3 上发布的。我完全不确定。在较新的版本中,您必须使用以下代码:wv.getSettings().setJavaScriptEnabled(true)。希望这能解决您的问题
      【解决方案3】:

      使用这个代码我认为它会为你工作,并根据你的需要修改它##

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

      【讨论】:

      • 好的,如果我想在 webview 上运行 javascript 命令呢?
      【解决方案4】:

      onLongClick 是 webview 的成员吗?

      您似乎无法在线程“WebViewCoreThread”上调用所有 WebView 方法。

      您可以使用处理程序,在 onLongClick 中向处理程序发送消息,然后在处理程序中调用 WebView 方法。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            猜你喜欢
            • 2015-07-09
            • 1970-01-01
            • 1970-01-01
            • 2016-05-07
            • 2016-09-14
            • 2021-03-15
            • 2015-05-28
            • 2013-05-16
            • 1970-01-01
            相关资源
            最近更新 更多