setJavaScriptCanOpenWindowsAutomatically 的真正目的是什么

问题描述 投票:0回答:1

根据Android文档

告诉 JavaScript 自动打开窗口。这适用于 JavaScript 函数 window.open()。默认为 false。

但是我没有看到在我的代码中使用或不使用这个API有什么不同,window.open在这两种情况下都工作得很好,那么这个API的真正目的是什么或者我的用法不正确?

我的代码示例如下:

public class MainActivity extends Activity {
private WebView mWebView;
//private Context mContext
RelativeLayout mParent;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mParent = new RelativeLayout(MainActivity.this);
    setContentView(mParent);

    mWebView = new WebView(MainActivity.this);
    WebSettings settings = mWebView.getSettings();
    settings.setSupportMultipleWindows(true);
    settings.setJavaScriptCanOpenWindowsAutomatically(false);
    settings.setJavaScriptEnabled(true);
    mParent.addView(mWebView);
    mWebView.loadUrl("file:///android_asset/create_window.html");

    mWebView.setWebViewClient(new MyWebViewClient());
    mWebView.setWebChromeClient(new WebChromeClient() {
        @Override
        public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) {
            WebView newWebView = new WebView(view.getContext());
            newWebView.getSettings().setUserAgentString("BBB");
            //newWebView.getSettings().setJavaScriptEnabled(true);
            //newWebView.setWebChromeClient(this);
            newWebView.setWebViewClient(new MyWebViewClient());
            //view.getSettings().setUserAgentString("CCC");
            mParent.addView(newWebView);
            WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
            transport.setWebView(newWebView);
            resultMsg.sendToTarget();
            return true;
        }

        @Override
        public void onCloseWindow(WebView window) {
            mParent.removeViewAt(mParent.getChildCount() - 1);
        }
    });

}

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

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);

    }

    @Override
    public void onPageFinished(WebView view, final String url) {
        super.onPageFinished(view, url);

    }
}

}

create_window.html 内容如下:

<html>
<!-- scripts -->
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Create Window</title>
    <script>
        function
        openURL ()
        {
            alert ("opening window");
            window.open ("http://www.whoishostingthis.com/tools/user-agent/",  "_blank", "width=200,height=100");
        }
    </script>
</head>

<body>
<div>
  <button onclick="openURL()">open website in new window</button>
</div>
</body>

</html>
javascript android webview
1个回答
0
投票

如果将

setJavaScriptCanOpenWindowsAutomatically
设置为 false,则 WebView 只能在
window.open
自动运行时阻止
window.open
,例如,当您将其放入
window.onload
时。

如果

window.open
button onlick
中,用户需要先点击它才能发生,所以它不会自动运行,因此不能被WebView阻止。

© www.soinside.com 2019 - 2024. All rights reserved.