setSupportMultipleWindows和setJavaScriptCanOpenWindowsAutomatically不允许webView弹出窗口。

5

我正试图在WebView中允许在网站上按下按钮时打开一个新窗口。我尝试启用setJavaScriptCanOpenWindowsAutomaticallysetSupportMultipleWindows,但是当按下按钮时仍然没有反应。

public class WebView extends AppCompatActivity {

    android.webkit.WebView myWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);

        myWebView = (android.webkit.WebView) findViewById(R.id.webview);
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setDomStorageEnabled(true);
        webSettings.setUserAgentString("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");
        webSettings.setAllowFileAccess(true);
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        webSettings.setSupportMultipleWindows(true);
        myWebView.loadUrl("https://somewebsite.com/");
    }

    @Override
    protected void onSaveInstanceState(Bundle outState ) {
        super.onSaveInstanceState(outState);
        myWebView.saveState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        myWebView.restoreState(savedInstanceState);
    }

}

我已经阅读并尝试了以下建议的答案:

我认为链接这里中的问题的答案可能不适用于我的情况,因为链接的问题是关于同一窗口内的弹出窗口,但我点击的按钮会完全打开一个新窗口(我无法更改)。

有人知道为什么setJavaScriptCanOpenWindowsAutomaticallysetSupportMultipleWindows不能解决问题,以及如何设置我的webview以允许单击一个按钮打开一个新窗口吗?


在你的脚本代码中保留 window.open(),并在 Android 端重写 WebChromeClient 中的 onCreateWindow - Mohd Qasim
1个回答

0

您已经到了正确的path,我们也遇到了相同的问题。 必须在Chrome浏览器上设置setJavaScriptCanOpenWindowsAutomaticallysetSupportMultipleWindows。您的代码正在使用默认的Webview:

myWebView = (android.webkit.WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();

WebView必须扩展使用Chrome的setWebChromeClient:
myWebView.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onCreateWindow(WebView view, boolean isDialog,
                    boolean isUserGesture, Message resultMsg) {

                    // Add your settings to the chrome browser:
                    WebView newWebView = new WebView(WebpageActivity.this);
                    newWebView.getSettings().setJavaScriptEnabled(true);
                    newWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
                    newWebView.getSettings().setSupportMultipleWindows(true);
           }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接