2012-02-25 164 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"));