Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Καλησπέρα παιδιά.

 

Σε μια εφαρμογή για Android η οποία λειτουργεί με webview χρησιμοποιώ localStorage μεταβλητές για να αποθηκεύω κάποια δεδομένα. 

 

Έχω το index.html και πατάω ένα κουμπί σε αυτό και μεταφέρομαι σε κάποιο άλλο html αρχείο. Εκεί αν γίνουν κάποιες εργασίες αποθηκεύει σε localStorage μια τιμή και επανέρχομαι μέσω ενός λινκ ξανά στο index.html. 

 

Στο δικό μου κινητό που τρέχει Android 6.0 λειτουργεί όπως πρέπει να λειτουργεί. 

 

Σε παλαιότερες εκδόσεις (όπως για παράδειγμα η 4.1.2) κατά την επιστροφή στο προηγούμενο html δεν φορτώνει τις localStorage μεταβλητές με τις τωρινές τιμές τους αλλά με αυτές που είχαν φορτωθεί αρχικά (σαν να έχει αποθηκεύσει το html στην προηγούμενη μορφή του και το ξανατρέχει). 

 

Αν κλείσω την εφαρμογή και την ξανανοίξω (μετά από clear στο recent apps) τότε οι localStorage μεταβλητές (δεν είναι μόνο μία) έχουν τις τιμές που πρέπει να έχουν.

 

Υπάρχει κάποιο webview setting που διορθώνει το θέμα;

 

*Δοκίμασα να προσθέτω στο link επιστροφής στο index.html μια Get unique value μπας και ανανεώσει τις τιμές αλλά δυστυχώς τζίφος.

 

Ορίστε ο java κώδικας: 

public class MainActivity extends AppCompatActivity {

    private WebView myWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);

        myWebView = (WebView) this.findViewById(R.id.webView);

        myWebView.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                //Required functionality here
                return super.onJsAlert(view, url, message, result);
            }
        });

        myWebView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url){

                if (url.contains("http") || url.contains("https")) { // Could be cleverer and use a regex
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(intent);
                    return true;
                }
                return false;

            //    view.loadUrl(url);
            //    return true;
            }
        });

        WebSettings settings = myWebView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setDomStorageEnabled(true);
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
            settings.setDatabasePath("/data/data/" + myWebView.getContext().getPackageName() + "/databases/");
        }
        myWebView.setVerticalScrollBarEnabled(false);
        myWebView.setHorizontalScrollBarEnabled(false);
        myWebView.loadUrl("file:///android_asset/www/index.html");
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        String x = myWebView.getUrl();
        boolean ch_url = x.contains("index.html");

        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            switch (keyCode) {
                case KeyEvent.KEYCODE_BACK:
                    if (myWebView.canGoBack()) {
                        if(ch_url == true){ //σε περίπτωση που μπορεί να επαναφέρει ξανά σελίδα μετά την αρχική
                            finish();
                        }else {
                            myWebView.goBack();
                        }
                    } else {
                        finish();
                    }
                    return true;
            }

        }
        return super.onKeyDown(keyCode, event);
    }
}

Επεξ/σία από rafinos
  • 2 εβδομάδες αργότερα...
Δημοσ. (επεξεργασμένο)

Αυτό έλυσε το πρόβλημα:

if(Build.VERSION.SDK_INT >= 16) {
   settings.setAllowUniversalAccessFromFileURLs(true);
}

Στην περίπτωσή μου βέβαια χρειάστηκε αυτό:

if(Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1 && Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
   settings.setAllowUniversalAccessFromFileURLs(true);
}

Γιατί στις νεότερες εκδόσεις γίνονταν clear οι αποθηκευμένες localStorage variables στο πρώτο άνοιγμα της εφαρμογής μετά το update. 

Επεξ/σία από rafinos
  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...