Ios 如何在UIWebView加载其初始请求之前设置本地存储? 视图控制器 test.html 标题 警报(localStorage.getItem(“键”))

Ios 如何在UIWebView加载其初始请求之前设置本地存储? 视图控制器 test.html 标题 警报(localStorage.getItem(“键”)),ios,swift,webview,uiwebview,Ios,Swift,Webview,Uiwebview,我在加载请求之前调用了localStorage.setItem('key','value')。我希望该警报将输出值,但它输出的值为空: 因此,我的问题是: 在UIWebView加载其初始请求之前,设置本地存储的正确方法是什么 编辑: 感谢@Wez指出我应该在webviewdiffinishload中评估JavaScript,但我想做的是在加载页面之前设置localStorage(我们将在初始请求中使用该localStorage)。所以我无法在webViewDidFinishLoad中对其进行评

我在加载请求之前调用了
localStorage.setItem('key','value')
。我希望该警报将输出
,但它输出的
值为空

因此,我的问题是:

UIWebView
加载其初始请求之前,设置本地存储的正确方法是什么

编辑:

感谢@Wez指出我应该在
webviewdiffinishload
中评估JavaScript,但我想做的是在加载页面之前设置localStorage(我们将在初始请求中使用该localStorage)。所以我无法在webViewDidFinishLoad中对其进行评估


有什么办法可以做到这一点吗?

本地主机不起作用,试试这个:

wv.loadRequest(URLRequest(url: URL(string: "http://10.0.2.2:63343/test.html")!))

您可以使用WKWebView代替UIWebView并加载脚本。看看这个示例,我是用C#创建的,但您可以将其转换为objective-C/Swift

        var configuration = new WKWebViewConfiguration();
        var contentController = new WKUserContentController();
        string js = "javascript: localStorage.setItem('key', 'value')";
        var userScript = new WKUserScript((NSString)js, WKUserScriptInjectionTime.AtDocumentStart, false);
        contentController.AddUserScript(userScript);
        configuration.UserContentController = contentController;

        WKWebView _wKWebView = new WKWebView(this.View.Frame,configuration);
        var url = "Your Url";
        var webViewRequest = new NSMutableUrlRequest(new Foundation.NSUrl(url));
        _wKWebView.LoadRequest(webViewRequest);

如果您正在寻找Swift版本:

let configuration = WKWebViewConfiguration()
let contentController = WKUserContentController()
let js = "javascript: localStorage.setItem('key', 'value')"
let userScript = WKUserScript(source: js, injectionTime: WKUserScriptInjectionTime.atDocumentStart, forMainFrameOnly: false)
contentController.addUserScript(userScript)
configuration.userContentController = contentController

let webview = WKWebView(configuration: configuration)
webview.load(URLRequest(url: URL(string: "your URL")))

您需要等待页面加载,然后才能评估Javascript。我认为这可能是一个重复的问题。@Wez可能重复,但我想在加载页面之前设置localStorage(我们将在其初始请求中使用该localStorage)。因此,我无法在
webviewdiffinishload
中对其进行评估……在webview完成加载@sayakissue之前,您是否找到将项目设置为本地存储的方法?如果我关闭并打开应用程序,则在web view中使用localstorage?是否保存该值?或者我必须以某种方式激活它?谢谢您缺少这一行
configuration.userContentController=contentController
回答得好!。谢谢:)
        var configuration = new WKWebViewConfiguration();
        var contentController = new WKUserContentController();
        string js = "javascript: localStorage.setItem('key', 'value')";
        var userScript = new WKUserScript((NSString)js, WKUserScriptInjectionTime.AtDocumentStart, false);
        contentController.AddUserScript(userScript);
        configuration.UserContentController = contentController;

        WKWebView _wKWebView = new WKWebView(this.View.Frame,configuration);
        var url = "Your Url";
        var webViewRequest = new NSMutableUrlRequest(new Foundation.NSUrl(url));
        _wKWebView.LoadRequest(webViewRequest);
let configuration = WKWebViewConfiguration()
let contentController = WKUserContentController()
let js = "javascript: localStorage.setItem('key', 'value')"
let userScript = WKUserScript(source: js, injectionTime: WKUserScriptInjectionTime.atDocumentStart, forMainFrameOnly: false)
contentController.addUserScript(userScript)
configuration.userContentController = contentController

let webview = WKWebView(configuration: configuration)
webview.load(URLRequest(url: URL(string: "your URL")))