Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Website won't load in android webview but works fine in android browsers

This has been annoying me for a while now and I could really use some help. I have a website created on portfoliobox.net which works fine in chrome and every other browser I tried on android (actual phones, not emulators), however I wanted to make it into an app for part of a University project. My webview app loads other websites fine but not mine for some reason, so yes I have set the permissions right and I have javascript enabled. It could be something simple but I'm a major noob and haven't got much of a clue.

Here is the logcat

04-30 22:08:56.954: W/BindingManager(8365): Cannot call determinedVisibility() - never saw a connection for the pid: 8365
04-30 22:08:56.962: E/com.parse.push(8365): successfully subscribed to the broadcast channel.
04-30 22:08:56.973: D/GCM(2579): COMPAT: Multi user ser=0 current=0
04-30 22:08:56.989: D/GCM(11959): GcmService start Intent { act=com.google.android.c2dm.intent.REGISTER pkg=com.google.android.gms cmp=com.google.android.gms/.gcm.GcmService (has extras) } com.google.android.c2dm.intent.REGISTER
04-30 22:08:57.145: I/Icing(2579): Indexing DBC59092704C7216FC04EAC8683F4EE7F5C1F3E0 from com.google.android.googlequicksearchbox
04-30 22:08:57.302: W/SQLiteConnectionPool(2579): A SQLiteConnection object for database '/data/data/com.google.android.gms/databases/auto_complete_suggestions.db' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.
04-30 22:08:57.302: W/SQLiteConnectionPool(2579): A SQLiteConnection object for database '/data/data/com.google.android.gms/databases/help_responses.db' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.
04-30 22:08:57.306: W/SQLiteConnectionPool(2579): A SQLiteConnection object for database '/data/data/com.google.android.gms/databases/metrics.db' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.
04-30 22:08:57.333: I/Icing(2579): Indexing done DBC59092704C7216FC04EAC8683F4EE7F5C1F3E0
04-30 22:08:57.333: D/PowerManagerService(912): releaseWakeLockInternal: lock=289528107 [Icing], flags=0x0
04-30 22:08:57.377: D/PowerManagerService(912): acquireWakeLockInternal: lock=1014891468, flags=0x1, tag="NetworkStats", ws=null, uid=1000, pid=912
04-30 22:08:57.406: D/PowerManagerService(912): releaseWakeLockInternal: lock=1014891468 [NetworkStats], flags=0x0
04-30 22:08:58.035: I/chromium(8365): [INFO:CONSOLE(0)] "'webkitIDBRequest' is deprecated. Please use 'IDBRequest' instead.", source:  (0)
04-30 22:08:58.270: I/chromium(8365): [INFO:CONSOLE(1)] "HARD RESET!!", source: http://www.broadbentstudios.com/application/_output/pb.out.front.js?v=7 (1)
04-30 22:08:58.277: I/chromium(8365): [INFO:CONSOLE(1)] "Uncaught TypeError: Cannot read property 'clear' of null", source: http://www.broadbentstudios.com/application/_output/pb.out.front.js?v=7 (1)

Main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <WebView android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:id="@+id/mainWebView"
      android:scrollbarSize="10dp"
      android:scrollbarThumbVertical="@drawable/customscroll">
     </WebView>


</LinearLayout>

BroadbentStudios.java

package com.broadbentstudios;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.parse.ParseAnalytics;

public class BroadbentStudios extends Activity {

    WebView webView;
    /** Called when the activity is first created. */
    @SuppressLint("SetJavaScriptEnabled")
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        webView = (WebView) findViewById(R.id.mainWebView);
        webView.setBackgroundColor(0x00000000);
        webView.setHorizontalScrollBarEnabled(false);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setLoadsImagesAutomatically(true);
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.loadUrl("http://www.broadbentstudios.com/");

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url)
            {
                view.loadUrl(url);
                return true;
            }



        });
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webView!=null && webView.canGoBack()) {
            webView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    {

        ParseAnalytics.trackAppOpenedInBackground(getIntent());
    }

}

I also use Parse for push notifications for new content but I tried a clean webview app without it too and that didn't work so I'm pretty sure it's not that.

I would think that because it works fine in browsers it is my app messing up somewhere, but I could be wrong I guess. any help would be greatly appreciated, even if it's my website and not my app, it would be good to know. Thank you.

like image 302
Lewis Broadbent Avatar asked Apr 30 '15 21:04

Lewis Broadbent


People also ask

How to handle page navigation in Android WebView?

Handling page navigation. When the user clicks a link from a web page in your WebView, the default behavior is for Android to launch an app that handles URLs. Usually, the default web browser opens and loads the destination URL. However, you can override this behavior for your WebView, so links open within your WebView.

What is WebView in Android system WebView?

Android System WebView allows third-party apps to open links in a browser. If it doesn’t work properly, links that are supposed to be open in a browser (links that are not associated with apps like YouTube), won’t open at all. So, what you need to do is make sure that WebView is up to date.

What happens when you click on a link in WebView?

When the user clicks a link from a web page in your WebView, the default behavior is for Android to launch an app that handles URLs. Usually, the default web browser opens and loads the destination URL. However, you can override this behavior for your WebView, so links open within your WebView.

How do I override the URL loading of a WebView?

myWebView.webViewClient = MyWebViewClient() Now when the user clicks a link, the system calls shouldOverrideUrlLoading (), which checks whether the URL host matches a specific domain (as defined above). If it does match, then the method returns false in order to not override the URL loading (it allows the WebView to load the URL as usual).


1 Answers

Well I've been searching for about 2 months for an answer to this and as soon as I come here for help I find it myself haha, typical. Anyway, for anybody in a similar situation, as well as enabling javascript you also need to enable Dom storage by adding in;

webView.getSettings().setDomStorageEnabled(true);

Change webView to whatever yours is called and you should be good to go.

Hope this helps someone.

like image 136
Lewis Broadbent Avatar answered Oct 03 '22 00:10

Lewis Broadbent