我尝试调用我的设备的浏览器加载包含以下内容的WebView中的页面:
window.open(
'http://www.stackoverflow',
'_blank'.
);
我需要从加载到WebView的html中执行此操作
但我没有成功,任何想法!?
答案 0 :(得分:2)
您的应用需要做几件事:
使用setJavaScriptCanOpenWindowsAutomatically
作为@ajpolt说。这将使window.open
不会失败。
启用setSupportMultipleWindows
。这使WebView实际上尝试打开一个新窗口。否则,它将在同一个WebView中打开URL。
连接到WebChromeClient.onCreateWindow
回调并在那里创建一个新的WebView
实例。对于这个新实例,您需要设置WebViewClient
,以便从shouldOverrideUrlLoading
启动意图。
以下是示例代码:
WebView webView = (WebView)findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setSupportMultipleWindows(true);
webView.setWebChromeClient(new ChromeClient());
这是ChromeClient
:
class ChromeClient extends WebChromeClient {
@Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
WebView tempWebView = new WebView(MainActivity.this);
tempWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
browserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
startActivity(browserIntent);
return true;
}
});
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(tempWebView);
resultMsg.sendToTarget();
return true;
}
}
答案 1 :(得分:0)
您可能错过了网络视图中的设置。
尝试在您的设置中使用setJavaScriptCanOpenWindowsAutomatically,如下所示:
mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);