android:在我的webview中打开弹出窗口

Vik*_*alp 10 android popupwindow android-webview

我在我的应用程序中有webview,我希望它在单击webview中的链接时打开弹出窗口.我添加了以下代码,但它不起作用: -

WebSettings webSettings = webViewPage.getSettings();    
webSettings.setJavaScriptEnabled(true);    
webSettings.setSupportMultipleWindows(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
Run Code Online (Sandbox Code Playgroud)

这就是我想要弹出窗口的方式 弹出窗口应该是这样的

Vik*_*alp 24

经过3年的漫长岁月,我正在回答我自己的问题:

当在网页内触摸链接时,根据网页实现,有两种可能的情况:1)链接将在同一窗口中打开.2)链接将在新窗口中打开.

那么使用下面的代码很容易处理第一种情况:

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

在WebViewClient实现中覆盖shouldOverrideUrlLoading将在同一窗口中打开链接.

现在让我们看看第二种情况,其中网页请求在新窗口中打开网址.对于这种情况,我们需要告诉我们的webview支持多个窗口,如下所示:

webView.getSettings().setSupportMultipleWindows(true);
Run Code Online (Sandbox Code Playgroud)

然后在webview中添加新的Web chrome客户端以在网页请求新窗口时获取事件

webView.setWebChromeClient(new WebChromeClient() {


        @Override
        public boolean onCreateWindow(WebView view, boolean isDialog,
                boolean isUserGesture, Message resultMsg) {



                WebView newWebView = new WebView(WebpageActivity.this);
                newWebView.getSettings().setJavaScriptEnabled(true);
                newWebView.getSettings().setSupportZoom(true);
                newWebView.getSettings().setBuiltInZoomControls(true);
                newWebView.getSettings().setPluginState(PluginState.ON);
                newWebView.getSettings().setSupportMultipleWindows(true);
                view.addView(newWebView);
                WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
                transport.setWebView(newWebView);
                resultMsg.sendToTarget();

                newWebView.setWebViewClient(new WebViewClient() {
                    @Override
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {
                        view.loadUrl(url);
                        return true;
                    }
                });

                return true;
            }
        }

    });
Run Code Online (Sandbox Code Playgroud)

干杯!!!

  • 这拯救了我的一天@Vikalp。非常感谢您提供解决方案。我在 webview 中加载网站的弹出窗口时遇到问题,导致应用程序崩溃。WebviewTransport 概念就解决了这个问题。再次感谢! (2认同)
  • 谈论第二种情况 - 这样打开的弹出窗口仅占据屏幕的一小部分。有没有办法使其全屏显示或更改其大小,以便在由于其较小的尺寸而对用户不可见的情况下用户不会忽略它? (2认同)