我在iOS项目中使用UIWebView。 在这个webview中的js代码中,我使用本地存储(通过密钥从本地存储读取数据,并通过密钥将数据写入本地存储)。
var items = JSON.parse(localStorage.getItem('key')) || []; //reading
localStorage.setItem('key', newJson); // writing
现在我只使用一个密钥来使用本地存储。 它工作正常。
但项目中所有UIWebViews的本地存储(我是对还是不对?)。当我在项目中使用两个或更多UIWebView时(所有webview的js代码相似),我需要使用多个密钥来使用本地存储(每个UIWebView一个密钥),以便每个webview使用自己的存储。 / p>
如何定义哪个UIWebView现在使用本地存储才能使用此UIWebView的密钥? 我如何在java脚本中获取UIWebViews id?
答案 0 :(得分:0)
您可以在localStorage()
。
通过这种方式,您可以在客户端内存中保存多于UIWebView
的数据,并通过密钥轻松检索。
一个例子:
// create an object with some properties (as value use data from UIWebView)
var uIWebViews = { 'uIWebView1': 1, 'uIWebView2': 2, 'uIWebView3': 3 };
// save your object into local storage
localStorage.setItem('uIWebViews', JSON.stringify(uIWebViews));
// retrieve the object from storage, remember to parse it
var retrievedObject = JSON.parse(localStorage.getItem('uIWebViews'));
// get the object
console.log('retrievedObject: ', uIWebViews);
// get a property, equivalent to get a key
console.log('key uIWebView2 has value: ', uIWebViews.uIWebView2);
实例,请打开控制台查看结果:https://jsfiddle.net/hsf8gf8d/
答案 1 :(得分:0)
为了让JS代码知道它运行的是什么webview,我会使用预定义的JS方法调用它的stringByEvaluatingJavaScriptFromString:
方法,该方法在页面中设置变量。所以你的JS代码可能有类似
function setWebViewID(webViewID) {
// save the identifier somewhere and perhaps call other functions
}
然后在webView中,一旦页面加载完毕,就调用
[myWebView stringByEvaluatingJavaScriptFromString:@"setWebViewID(\"myID\")"]
诀窍通常是确保在加载后立即使用JS中的任何其他内容完成内容。如果您需要类似的内容,我建议您使用WKWebView
,WKUserContentController
并查看addScriptMessageHandler:name:
。有了它,您可以从webview正确设置侦听JS中的事件。