根据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>
如果将
setJavaScriptCanOpenWindowsAutomatically
设置为 false,则 WebView 只能在 window.open
自动运行时阻止 window.open
,例如,当您将其放入 window.onload
时。
如果
window.open
在button onlick
中,用户需要先点击它才能发生,所以它不会自动运行,因此不能被WebView阻止。