2012-02-25 170 views
5

我有一個簡單的具有WebView的Android應用程序。 WebView設置爲瀏覽到使用JavaScript的localStorage功能的網站。Android - 直接從Java讀取HTML5 localStorage數據

我已經得到了我的WebSettings設置爲允許DomStorage:

webSettings.setJavaScriptEnabled(true); 
ebSettings.setDomStorageEnabled(true); 

String dbPath = this.getApplicationContext().getDir("database", MODE_PRIVATE).getPath();   
webSettings.setDatabasePath(dbPath); 

我需要的是一種方式,我的Java代碼可以讀取使用localStorage的機制存儲一個變量,即:

JavaScript是這樣做的:

var storage = window.localStorage; 
    storage.setItem("name", "Hello World!"); 

如何從Java代碼中從localStorage讀取「name」的值?

回答

0
yourWebView.setWebChromeClient(new WebChromeClient(){ 
     public boolean onJsAlert(WebView view, String url, String message, JsResult result) { 
     Log.d(tag, "That's my local storage value =" + message); 
     return false; 
     }; 
    }); 
(...) 
    yourWebView.loadURL("javascript:alert(localStorage.getItem(\"name\"))"); 
+0

這給了我:「未捕獲的SecurityError:無法讀取「 「窗口」中的localStorage屬性:此文檔的訪問被拒絕。「 – Onheiron 2016-07-26 12:16:49

+0

@Onheiron我也面臨同樣的問題。你解決了嗎? – 2017-05-22 07:36:33

0

在活動

webView.addJavascriptInterface(myInterface, "JSInterface"); 

的JavaScript接口類的JavaScript

class myInterface 
{ 

    @JavascriptInterface 
    public void getVariable(string fromLocalStorage) 
    { 
    //your code 
    } 

} 

window.JSInterface.getVariable(localStorage.getItem("variableName")) 
1

是能夠在Java(Android設備)讀取localStorage的值。

使用此插件https://www.npmjs.com/package/cordova-plugin-nativestorage 使用本機存儲。

- 因爲,我們在科爾多瓦

NativeStorage.setItem("reference", obj, setSuccess, setError); 
    function setSuccess(obj){ 
    } 
    function setError(obj){ 
    } 

並在Anroid的Java文件設定值來得到這個值:

SharedPreferences sharedPreferences = getSharedPreferences("MainActivity", MODE_PRIVATE); 
    System.out.println("********--------- shared pref values... " + sharedPreferences.getString("myid", "no value"));