Android 如何将值写入 HTML5 localstorage?
How can Android write a value onto HTML5 localstorage?
我有一个 webview android 应用程序,它打开一个包含一些 HTML5/ JavaScript 代码的网页。我想将一些值从我的应用程序的 android 端传递到浏览器端。所以我想从 Android 写入 HTML5 localstorage,然后网页的 Javascript 部分从 localstorage 读取值。
Android webview 如何写入 HTML5 localstorage?
或者 android 是否可以将某些值传递给它加载的页面的 javascript? (无需重新加载整个页面)假设将某些内容写入 HTML5 本地存储,然后 javascript 代码从 HTML5 本地存储
中读取该内容
它不同于 how to pass json formatted data from a webview to a html page。我需要一种通过 android
写入 HTML5 localstorage 的方法
您可以通过 javascript 的位置哈希 属性 来完成。
Android 代码可能如下所示
WebView myWebView = (WebView) findViewById(R.id.myWebView);
myWebView.loadUrl("http://www.example.com/#any_value");
myWebView.setWebViewClient(new MyWebViewClient());
而 Javascript 代码如下所示
var x = location.hash; //this will access the hash value you pass in url
localStorage.setItem("save_my_value", x);
像字符串一样传递变量:
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
String key = "hello";
String val = "world";
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript("localStorage.setItem('"+ key +"','"+ val +"');", null);
} else {
webView.loadUrl("javascript:localStorage.setItem('"+ key +"','"+ val +"');");
}
}
});
第二种变体是使用 JavaScriptInterface
初始化部分
JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");
JavaScript 接口
public class JavaScriptInterface {
private Activity activity;
public JavaScriptInterface(Activity activiy) {
this.activity = activiy;
}
public string getData(String someParameter){
//also you can return json data as string and at client side do JSON.parse
if (someParameter == "give me data" && this.activity.data) {
return this.activity.data;
}else{
return null;
}
}
}
Js部分
<script>
function ready() {
var data = window.JSInterface.getData("give me data");
localStorage.put("give me data", data)
};
document.addEventListener("DOMContentLoaded", ready);
</script>
Android webview 如何写入 HTML5 localstorage?
localStorage.setItem("data", value);
注意:使用本地存储,Web 应用程序可以在用户的浏览器中本地存储数据。 HTML本地存储;比饼干更好。
尝试 addJavaScriptInterface() 绑定您的 android class 和网页。
我有一个 webview android 应用程序,它打开一个包含一些 HTML5/ JavaScript 代码的网页。我想将一些值从我的应用程序的 android 端传递到浏览器端。所以我想从 Android 写入 HTML5 localstorage,然后网页的 Javascript 部分从 localstorage 读取值。
Android webview 如何写入 HTML5 localstorage?
或者 android 是否可以将某些值传递给它加载的页面的 javascript? (无需重新加载整个页面)假设将某些内容写入 HTML5 本地存储,然后 javascript 代码从 HTML5 本地存储
中读取该内容它不同于 how to pass json formatted data from a webview to a html page。我需要一种通过 android
写入 HTML5 localstorage 的方法您可以通过 javascript 的位置哈希 属性 来完成。
Android 代码可能如下所示
WebView myWebView = (WebView) findViewById(R.id.myWebView);
myWebView.loadUrl("http://www.example.com/#any_value");
myWebView.setWebViewClient(new MyWebViewClient());
而 Javascript 代码如下所示
var x = location.hash; //this will access the hash value you pass in url
localStorage.setItem("save_my_value", x);
像字符串一样传递变量
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
String key = "hello";
String val = "world";
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript("localStorage.setItem('"+ key +"','"+ val +"');", null);
} else {
webView.loadUrl("javascript:localStorage.setItem('"+ key +"','"+ val +"');");
}
}
});
第二种变体是使用 JavaScriptInterface
初始化部分
JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");
JavaScript 接口
public class JavaScriptInterface {
private Activity activity;
public JavaScriptInterface(Activity activiy) {
this.activity = activiy;
}
public string getData(String someParameter){
//also you can return json data as string and at client side do JSON.parse
if (someParameter == "give me data" && this.activity.data) {
return this.activity.data;
}else{
return null;
}
}
}
Js部分
<script>
function ready() {
var data = window.JSInterface.getData("give me data");
localStorage.put("give me data", data)
};
document.addEventListener("DOMContentLoaded", ready);
</script>
Android webview 如何写入 HTML5 localstorage?
localStorage.setItem("data", value);
注意:使用本地存储,Web 应用程序可以在用户的浏览器中本地存储数据。 HTML本地存储;比饼干更好。
尝试 addJavaScriptInterface() 绑定您的 android class 和网页。