我有一个PhoneGap应用程序,我使用HTML5 LocalStorage,因此保存用户数据(如用户令牌,用户名等)。从PhoneGap升级到本机
事情是,最近我们决定从PhoneGap转移到原生Android应用程序。但有一件事我需要解决:
是否有可能使用java代码从HTML5 LocalStorage获取数据?我们不希望用户在更新后注销,所以我需要一种方法从LocalStorage中获取用户令牌并将其保存在SharedPreferences中。
在此先感谢!
我有一个PhoneGap应用程序,我使用HTML5 LocalStorage,因此保存用户数据(如用户令牌,用户名等)。从PhoneGap升级到本机
事情是,最近我们决定从PhoneGap转移到原生Android应用程序。但有一件事我需要解决:
是否有可能使用java代码从HTML5 LocalStorage获取数据?我们不希望用户在更新后注销,所以我需要一种方法从LocalStorage中获取用户令牌并将其保存在SharedPreferences中。
在此先感谢!
普拉卡什向我指出正确的方向,但也有一些东西丢失:
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
}
}
有一些设置来配置web视图:
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");
}
希望这会帮助别人一天
这是可能的。为了执行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来调用它。这一切都取决于你将从哪里调用。