Reputation: 1729
On Android 7.1.1 i have a page on my app that creates a webview and allows some navigation around my site. the first page loads fine, but when i click a link within the webview it shows a white blank page. this all works fine on previous versions of android.
I understand the changes google have made with the webview and chrome is updated and i have been through various resetting and installing of the new webview system app, so i am unsure if the problem is related. I am thinking its not otherwise the first page wouldnt load.
Here is my webview code
public class WebViewActivity extends Activity
{
Service details;
String URL;
WebView webView;
private DataManager mDataManager;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
URL = (String)bundle.getString("url");
webView = (WebView) findViewById(R.id.wv);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.setWebViewClient(new GeoWebViewClient());
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setGeolocationEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.setWebChromeClient(new GeoWebChromeClient());
webView.clearCache(true);
webView.loadUrl(URL);
//webView.setWebViewClient(new Client());
//webView.setWebChromeClient(new ChromeClient());
if (Build.VERSION.SDK_INT >= 19) {
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
}
else if(Build.VERSION.SDK_INT >=11 && Build.VERSION.SDK_INT < 19) {
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (webView.canGoBack()) {
webView.goBack();
} else {
finish();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
/**
* WebChromeClient subclass handles UI-related calls
* Note: think chrome as in decoration, not the Chrome browser
*/
public class GeoWebChromeClient extends WebChromeClient
{
@Override
public void onGeolocationPermissionsShowPrompt(String origin,
GeolocationPermissions.Callback callback)
{
// Always grant permission since the app itself requires location
// permission and the user has therefore already granted it
callback.invoke(origin, true, false);
}
}
public class GeoWebViewClient extends WebViewClient
{
@Override
public void onPageFinished(WebView view, String url)
{
// TODO Auto-generated method stub
super.onPageFinished(view, url);
}
/*@deprecated
public boolean shouldoverrideurlloading(webview view, string url) {
return false;
}*/
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
{
view.loadUrl(request.toString());
return true;
}
}
}
I think it may have something to do with shouldOverrideUrlLoading
Upvotes: 0
Views: 2069
Reputation: 21043
You need to set a WebClient
to webView
. If you want to open link in webview
.
Then do like this.
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}
});
for Android N above Use Overridden method :
@TargetApi(Build.VERSION_CODES.N)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return false;
}
Upvotes: 1