rafinos Δημοσ. 30 Οκτωβρίου 2016 Δημοσ. 30 Οκτωβρίου 2016 (επεξεργασμένο) Καλησπέρα παιδιά. Σε μια εφαρμογή για 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); } } Επεξ/σία 31 Οκτωβρίου 2016 από rafinos
rafinos Δημοσ. 10 Νοεμβρίου 2016 Μέλος Δημοσ. 10 Νοεμβρίου 2016 (επεξεργασμένο) Αυτό έλυσε το πρόβλημα: 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. Επεξ/σία 10 Νοεμβρίου 2016 από rafinos 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα