我如何在java脚本中获取UIWebViews id?

时间:2016-08-10 07:49:17

标签: javascript ios objective-c uiwebview local-storage

我在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?

2 个答案:

答案 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中的任何其他内容完成内容。如果您需要类似的内容,我建议您使用WKWebViewWKUserContentController并查看addScriptMessageHandler:name:。有了它,您可以从webview正确设置侦听JS中的事件。