我有一个PhoneGap应用程序,我使用HTML5 LocalStorage,因此保存用户数据(如用户令牌,用户名等)。
问题是,最近我们决定从PhoneGap迁移到Native Android应用程序。但有一件事我需要解决:
是否可以使用java代码从HTML5 LocalStorage获取数据?我们不希望用户在更新后注销,因此我需要一种方法从该LocalStorage获取用户令牌并将其保存在SharedPreferences中。
提前致谢!
答案 0 :(得分:1)
这是可能的。要执行JavaScript并获得响应,您可以执行以下操作:
在代码中定义JavaScript回调接口:
class MyJavaScriptInterface {
public void someCallback(String jsResult) {
// this will be passed the local storage name variable
}
}
将此回调附加到您的WebView:
MyJavaScriptInterface javaInterface = new MyJavaScriptInterface();
webView.addJavascriptInterface(javaInterface, "HTMLOUT");
Run your JavaScript calling window.HTMLOUT.someCallback from the script:
webView.loadUrl("javascript:( function () { var name = window.localStorage['name'];
window.HTMLOUT.someCallback(name); } ) ()");
注意 - window.localStorage ['name']与window.localStorage.getItem('name')
相同这篇关于stackoverflow的帖子帮助了我
您可能需要使用super.webView.addJavascriptInterface或super.addJavascriptInterface来添加界面。您可能需要使用super.webView.loadUrl或super.loadUrl来调用它。这一切都取决于你打算从哪里打电话。
答案 1 :(得分:0)
prakash指出我正确的方向,但有一些事情缺失:
public class MyJavaScriptInterface { //the class and the callbacks must be public
@JavascriptInterface //this is needed for android 4.2 and above
public void someCallback(String jsResult) {
// this will be passed the local storage name variable
}
}
要为webView配置一些设置:
public void importPhoneGapUser() {
String databasePath = getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
String pathToCache = getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
WebView mAuthWebView = new WebView(this);
WebSettings webSettings = mAuthWebView.getSettings();
webSettings.setDatabasePath(databasePath);
webSettings.setAppCachePath(pathToCache);
webSettings.setGeolocationDatabasePath(databasePath);
webSettings.setAppCacheMaxSize(5 * 1048576);
webSettings.setAppCacheEnabled(true);
webSettings.setDatabaseEnabled(true);
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
mAuthWebView.addJavascriptInterface(new MyJavaScriptInterface (), "JsInterface");
//i wasn't able to run JS through 'javascript:' protocol, so i had to use a HTML file
mAuthWebView.loadUrl("file:///android_asset/import_auth.html");
}
希望有一天能帮到某人