Empty webView after several pages loaded in JB and above - android

I am using a webView to display some contents in my android app:
WebView webView = (WebView) rootView.findViewById(R.id.web_view);
WebSettings settings = webView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
settings.setJavaScriptEnabled(true);
settings.setLoadsImagesAutomatically(true);
settings.setSupportZoom(false);
webView.loadUrl("about:blank");
webView.loadData(result.getHtmlContent(), "text/html; charset=UTF-8", "UTF-8");
This works perfectly in ICS and below, yet in JB and above the pages load correctly the first times (from two to five/six times generally). After that, the webView appears blank. Even after debugging, the code seems to run normally, it's just not displayed. The only way to see the page is to terminate the app and restart it, and it happens again.
Does anyone know how to fix this?

Why do you have the webView.loadUrl("about:blank") immediately before the loadData call? Does it help if you remove the about:blank load?
Also, 'not displayed' is pretty vague - is the content loaded but not rendering or does the page not get navigated to? Check what URLs your're getting from the WebViewClient.onPageStarted/onPageFinished callbacks. It might help if you call loadData from onPageFinished if url == "about:blank" if this is a navigation issue.

I used
webView.loadData(htmlContent, "text/html; charset=UTF-8",null);
for the versions greater than GINGERBREAD_MR1.
And
webViewLivraison.loadDataWithBaseURL("",htmlContent, "text/html", "UTF-8", "");
for the versions GINGERBREAD_MR1 and below. And its working fine for me.
Try this and let me know.

Try this clear for every time before the page load also try to clear the caches if u need.
WebSettings settings = webView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
settings.setJavaScriptEnabled(true);
settings.setLoadsImagesAutomatically(true);
settings.setSupportZoom(false);
webView.setWebViewClient(new CustomWebClient());
webView.clearView();
// add if u need
webView.clearCache(true);
webView.loadData(result.getHtmlContent(), "text/html; charset=UTF-8", "UTF-8");

There are possible reasons causing "WebView goes blank after finish loading page":
If your WebView part defined in the layout xml file has dimensions like
android:layout_width="wrap_content"
or
android:layout_height="wrap_content"
Then after the page is loaded, the content is defined and WebView tries to "wrap" it, thus in some cases reduces the view's dimensions into 0dp and make your WebView invisible.
Solution: change all those into fill_parent
android:layout_width="fill_parent"
android:layout_height="fill_parent"
This may be caused by an SSL certification error. Try this:
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}

Related

Android Webview doesn't load

I have a problem with Android Web view.
The slider work fine with Apple but doesn't load on Android WebView.
Can anyone help? www.pgc-usa.net/ivynails
Thanks
I think I know. Web views in Android by default do not have JavaScript enabled. This is because there is someway it can do harm to the app. To enable it though it takes two lines
WebSettings webSettings = yourWebview.getSettings();
yourWebview.setJavaScriptEnabled(true);
You can also set it so that links that are clicked open in the web view. ( Otherwise they open in browser.) to add this you just add
yourWebview.setWebViewClient(new WebViewClient());
All that together will make it come to this:
WebView yourWebview = (WebView) findViewById(R.id.myWebview);
yourWebview.loadUrl("http://www.pgc-usa.net/ivynails");
WebSettings webSettings = yourWebviewgetSettings();
webSettings.setJavaScriptEnabled(true);
yourWebview.setWebViewClient(new WebViewClient());
You can find out more by visiting this page on the Android developer site by clicking this link.

WebView in Android not showing web page styles

I am trying to make an Android app display a website in a WebView, but only the website home page actually show content properly via the WebView, the other pages completely disregard the website styles and display content with a white background and blue default hyperlinks. I tested the same type of app on iOS and it works fine there. What can I do about it?
This is the method:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView myWebView = (WebView) findViewById(R.id.webView);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.setWebViewClient(new WebViewClient());
myWebView.loadUrl("http://www.awesomestories.com");
}
Settings should be set. Tricks Like this:
WebSettings settings = webview.getSettings();
settings.setBuiltInZoomControls(true);
settings.setPluginState(PluginState.ON);
settings.setJavaScriptEnabled(true);
settings.setSupportZoom(true);
If you have kept Single Column Setting in WebView remove it, it will work just perfect.
myWebView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
If you have not kept Single Column setting and still its not working, then check that you have enabled JavaScript or not, if not then enable it.
myWebView.getSettings().setJavaScriptEnabled(true);
Android WebView requires you to explicitly enable javascript.
Styles in the page may be loaded via javascript, and generally websites don't tend to work good without it, so enabling it is important and might solve your problem in addition to that.
myWebView.getSettings().setJavaScriptEnabled(true);

Using local storage on Android webview

I am experimenting with Android code: I would like to store one value using HTML 5 local storage. For this exercise I' using a page as simple as this one:
http://www.w3schools.com/html5/tryit.asp?filename=tryhtml5_webstorage_local_clickcount
My manifest does allow me to hit the internet, and it is min-sdk of 7.
Here is my java code:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webview = (WebView) findViewById(R.id.webview);
WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
WebSettings webSettings = webview.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDatabasePath("");
webSettings.setDomStorageEnabled(true);
webview.setWebChromeClient(new WebChromeClient());
webview.loadUrl("http://www.xyz.com/test.html");
///xyz.com/test.html is a sample :)
webview.setWebViewClient(new HelloWebViewClient());
}
My problem is that when I close the app, the locally stored value is no longer there. I can browse to the same page using the default browser, and the value is persistent even after closing the emulator, which is exactly the behavior that I am looking for.
This is probably a something extremely simple....any ideas?
It appears the empty string DatabasePath is the problem. I tried similar code and with an empty string path, the value does not persist after the app exits. If I define a specific database path, the value persists as expected.
Try:
webSettings.setDatabasePath("/data/data/"+this.getPackageName()+"/databases/");
If your app use multiple webview you will still have troubles : localStorage is not correctly shared accross all webviews.
If you want to share the same data in multiple webviews the only way is to repair it with a java database and a javascript interface.
This page on github shows how to do this.
hope this help!
Couldn't get it working on all devices (especially with ICS) - even with database path, enabling DOMStorage etc. - using cookies instead helped me out.

Video not appearing on a WebView

I has a app that loads a url on a WebView.
web = (WebView) findViewById(R.id.webview);
WebSettings settings = web.getSettings();
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(false);
settings.setSupportMultipleWindows(false);
settings.setSupportZoom(false);
settings.setPluginsEnabled(true);
web.setVerticalScrollBarEnabled(false);
web.setHorizontalScrollBarEnabled(false);
web.loadUrl(lastUrl);
But a spot that should has Video first shows a "loading" view than disappears, if a tap on it occurs, the sound of the video starts playing but not show.
PS: I came across answers that told to add the hardwareAccelerated flag on Manifest, but this solutions simply does not work here.
I used settings.setDomStorageEnabled(true) as well with hardwareAccelerated="true" and it's working.
Did you see this question and the comment from slytron?
By the way setPluginsEnabled is deprecated in favor of setPluginState as of API level 8.

How to set WebView as non-fullscreen?

I am trying to use a WebView in my Android application. I am creating my webview in code-side (not in XML). My problem is; when I call loadUrl method of webview, the webview goes fullscreen mode. How can I keep the size of the webview for example 200x200 pixels?
If there is any other option instead of webview, of course welcome :)
Thanks,
Quite possibly what you are seeing is not your activity, but the Browser application, because the URL you linked to did a redirect. Use WebViewClient and shouldOverrideUrlLoading() to catch the redirect and send it back to your own WebView.
#Mahtias Lin, please see my code to create and use WebView;
WebView webView = new WebView(this);
RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, 416);
WebSettings webSettings = webView.getSettings();
webSettings.setSavePassword(false);
webSettings.setSaveFormData(false);
webSettings.setJavaScriptEnabled(true);
webView.setLayoutParams(p);
webView.loadUrl("http://www.google.com/");
Above code is not set my webview to 416px height.
#CommonsWare, I tried your suggested with following code and amazingly it works, thanks.
webView.setWebViewClient(new WebViewClient() {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return false;
}
});
But this usage brought some new problems. When I override shouldOverrideURLLoading, the webview displays with no-addressbar, no-navigation (back, forward etc...)?
And also, the webview doenst accept user inputs?
Ok, I am editing my question :)
I searched and I found the following additional set to make webview to able to get inputs;
webView.requestFocus(View.FOCUS_DOWN);
On the other hand, I guess I will create my own back, forward buttons and address-bar for my webview. I will also attach "what happened" to this thread when I create my buttons and address-bar.
Best,
WebView wb=new WebView();
wb.setInitialScale(60);
this is used for set layout of the emulator. 60 means % value. we can use 0% to 100%.
See my reply and comments on
how to show a webview inside an activity in the middle of screen
Apply LayoutParams to your WebView or to the Layout (i.e. LinearLayout) that's surrounding the WebView, if any, i.e. setLayoutParams(LinearLayout.LayoutParams(200, 200));

Categories

Resources