I try to call the browser of my device loading a page inside a WebView that contains:
window.open(
'http://www.stackoverflow',
'_blank'.
);
I need to do this from the html that is loaded into the WebView
but i have no success, any idea!?
I try to call the browser of my device loading a page inside a WebView that contains:
window.open(
'http://www.stackoverflow',
'_blank'.
);
I need to do this from the html that is loaded into the WebView
but i have no success, any idea!?
There are several things you need to do in your app:
Use setJavaScriptCanOpenWindowsAutomatically as @ajpolt says. This will allow window.open to not fail.
Enable setSupportMultipleWindows. This makes WebView to actually attempt opening a new window. Otherwise, it will be opening the URL in the same WebView.
Hook up to WebChromeClient.onCreateWindow callback and create a new WebView instance there. For this new instance, you need to set WebViewClient that will launch the intent from shouldOverrideUrlLoading.
Below is sample code:
WebView webView = (WebView)findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setSupportMultipleWindows(true);
webView.setWebChromeClient(new ChromeClient());
And this is the 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;
}
}
You are probably missing a setting on your webview.
Try using setJavaScriptCanOpenWindowsAutomatically in your settings, like this:
mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);