我如何在java脚本中获得UIWebViews id

How I can get UIWebViews id in java script?

本文关键字:UIWebViews id 脚本 java      更新时间:2023-09-26

我在iOS项目中使用UIWebView。在这个webview的js代码中,我使用本地存储(通过键从本地存储读取数据,并通过键将数据写入本地存储)。

var items = JSON.parse(localStorage.getItem('key')) || []; //reading
localStorage.setItem('key', newJson);  // writing

现在我只使用一个键来使用本地存储。

但是本地存储在项目中的所有uiwebview(我是对的还是不对的?)。当我在项目中使用两个或多个UIWebView时(js代码对所有的webview都是类似的),我需要使用多个键来使用本地存储(每个UIWebView一个键),以便每个webview使用自己的存储。

我如何定义哪个UIWebView使用本地存储现在为了使用这个UIWebView键?我怎么能得到UIWebViews id在java脚本?

您可以在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/

为了让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中的事件。