【问题标题】:Why Android WebChromeClient's onCreateWindow method never got called?为什么 Android WebChromeClient 的 onCreateWindow 方法从未被调用?
【发布时间】:2012-03-01 06:55:53
【问题描述】:

我正在 webview 服务上构建我的应用程序并尝试在另一个窗口中打开新的 url(既不是在默认系统浏览器中,也不是在同一个 webview 中)。我设置了自己的 WebViewClient 和 WebChromeClient 如下所示,

public class MyWebViewClient extends WebViewClient {  
    @Override
    public boolean shouldOverrideUrlLoading (WebView view, String url) {
        view.loadUrl(url);        
        return true;
    }
}

public class MyWebChromeClient extends WebChromeClient {
    @Override
    public boolean onCreateWindow (WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
        WebView childView = new WebView(view.getContext());
        final WebSettings settings = childView.getSettings();
        settings.setJavaScriptEnabled(true);
        childView.setWebChromeClient(this);
        childView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
        transport.setWebView(childView);
        resultMsg.sendToTarget();
        Log.d(LOG_TAG, "onCreateWindow");   // never log
        return true;
    }
}

我也确实将我的 webview setSupportMultipleWindows 设置为 true
但是,onCreateWindow 从未被调用过。有什么我错过的吗?
提前致谢。

【问题讨论】:

  • 你的 onCreate() 方法是什么样的?
  • 我只想在另一个网页视图中加载新的网址。老实说,我在某个地方复制了它
  • 嗨@fifth 你找到解决方案了吗?
  • 逐字尝试此答案中的代码:stackoverflow.com/a/8022295/671393
  • childView 不添加到 webview 甚至对话框。你怎么能期望看到窗口。尝试添加webView.addView(childView);

标签: android webview


【解决方案1】:

您是否告诉“父”webview 允许多个窗口?

WebView parentWebview = (WebView) findViewById(R.id.parent_webview);
// ...
parentWebview.getSettings().setSupportMultipleWindows(true);

这是我见过的最常见的错误。

【讨论】:

    【解决方案2】:

    将此行添加到代码中以调用 onCreateWindow() webView.getSettings().setSupportMultipleWindows(true);

    【讨论】:

      【解决方案3】:

      如果没有完整的代码,很难说为什么 OnCreateWindow() 没有被调用。在您的活动 OnCreate() 方法中,您是否有类似以下的代码?

          // Get the main web viewer
          mWebView = (WebView) findViewById(R.id.webViewer);
      
          // Enable Javascript
          WebSettings webSettings = mWebView.getSettings();
          webSettings.setJavaScriptEnabled(true);
      
          // Set WebViewClient and WebChromClient
          mWebView.setWebViewClient(new MyWebViewClient());
          mWebView.setWebChromeClient(new MyWebChromeClient());
      

      另外,您认为应该在哪个代码中调用OnCreateWindow()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多