2015-05-05 31 views
6

Kullanmaya çalışırken konsolda "Erişim reddedildi" hatası görüyorum ancak localStorage'a erişmek ve kullanmak için gereken her şeye sahip olduğuna inandığım bir Android web görünümü var. yerel depolama. Uncaught SecurityError: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.Android WebView'da yerel depolama kullanarak erişim engellendi Erişim

Sorun olan var mı?

JavaScript Kodu:

function localStorageTest() { 
    // Check browser support 
    if (typeof(Storage) != "undefined") { 
    // Store 
    localStorage.setItem("lastname", "Smith"); 
    // Retrieve 
    document.getElementById("console").innerHTML = localStorage.getItem("lastname"); 
    } else { 
    document.getElementById("console").innerHTML = "Sorry, your browser does not support Web Storage..."; 
    } 
} 

İşte Android kod:

// Enable javascript 
    WebSettings settings = getSettings(); 
    settings.setJavaScriptEnabled(true); 
    settings.setDomStorageEnabled(true); 
    settings.setDatabaseEnabled(true); 

    // Create database folder 
    String databasePath = getContext().getDir("databases", Context.MODE_PRIVATE).getPath(); 
    getSettings().setDatabasePath(databasePath); 

    getContext().getPackageName() + "/databases/"); 

    settings.setAppCacheEnabled(true); 
    settings.setSaveFormData(true);; 
    settings.setLoadWithOverviewMode(true); 
    settings.setSaveFormData(true); 
+0

Üçüncü taraf çerezleri ile mi oynuyorsunuz? – Rayon

cevap

5

Erişim localStorage sadece http:, https: ve file: gibi belirli "Web güvenli" programlarından sayfalarda izin verilir. Örneğin, about: ve data: şemaları ya da kullanmakta olduğunuz herhangi bir özel şema için çalışmaz. Chrome aynı şekilde davranır, masaüstünde kontrol edebilirsiniz.

+0

Hmm ... bir sunucudan hizmet vermek yerine kendi HTML içeriğimi yüklerseniz, işe yaramaz mı? – bugfixr

+0

'WebView.loadDataWithBaseUrl' kullanmayı deneyin ve' http: 'şemasından başlayan bir temel URL belirtin. Veya uygulamanızın içinde basit bir web sunucusu çalıştırabilirsiniz. –

1

izinlerini Manifest.xml depolama ve ağa erişmek için sormak mü? Böyle

şey:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

Evet, aldım. – bugfixr

+0

İyi ... Google Chrome ile bu sorunu yaşayan insanları buluyorum, ancak bunu yalnızca bir ViewPager için bulamıyorum, ama kim bilir, belki bu yardımcı olabilir: http://stackoverflow.com/questions/24456891/iframe -in-chrome-error-uncaught-securityerror-read-the-sessionstora – Damien

0

JS'deki genel nesneyi değiştirmek için bir numaraya ihtiyacımız var. @Mikhail Naganov, kromun güvenlik hakkında şikayette bulunduğunu söyledi. Access denied using local storage in Android WebView

Js'yi temel URL olarak yüklüyorum ve js de gerçek URL'ye yönlendiriyor. Altında kod çalışıyordu benim için Android 7

String mimeType = "text/html"; 
    String encoding = "utf-8"; 
    String injection = "<script type='text/javascript'>localStorage.setItem('key', 'val');window.location.replace('REAL_URL_HERE');</script>"; 
    webview.loadDataWithBaseURL("REAL_URL_HERE", injection, mimeType, encoding, null); 
İlgili konular