将本地存储从 swift 注入到 WKWebview
Posted
技术标签:
【中文标题】将本地存储从 swift 注入到 WKWebview【英文标题】:Inject local storage from swift to WKWebview 【发布时间】:2017-12-15 12:18:03 【问题描述】:我的 Swift 代码:
self.webView.evaluatejavascript("javascript: localStorage.setItem('usr_dtls', 'vivek')") (result, error) -> Void in
print(result)
print(error)
Error message in cosole:
nil
Optional(Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo=WKJavaScriptExceptionLineNumber=1, WKJavaScriptExceptionMessage=SecurityError (DOM Exception 18): The operation is insecure., WKJavaScriptExceptionColumnNumber=25, WKJavaScriptExceptionSourceURL=about:blank, NSLocalizedDescription=A JavaScript exception occurred)
知道有什么问题吗?
【问题讨论】:
尝试删除javascript:
。
控制台中仍然出现相同的错误消息:Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo=WKJavaScriptExceptionLineNumber=1, WKJavaScriptExceptionMessage=SecurityError (DOM Exception 18): 操作不安全。 , WKJavaScriptExceptionColumnNumber=13, WKJavaScriptExceptionSourceURL=about:blank, NSLocalizedDescription=发生 JavaScript 异常
【参考方案1】:
//Found a solution.Execute Javascript after webView finished loading
//Sample code:
self.webView.navigationDelegate = self
func webView(_ webView: WKWebView,
didFinish navigation: WKNavigation!)
self.webView.evaluateJavaScript("localStorage.setItem('usr_dtls', 'vivek')") (result, error) -> Void in
print("Finished navigation and Local storage injection.")
//Run the app and debug using Safari Technology Preview
//You will see the injected data as Show in the image below:
[![Screenshot][1]][1]
[1]: https://i.stack.imgur.com/tzGUc.png
【讨论】:
完美工作【参考方案2】:由于evaluateJavaScript
就像从 Safari Inspector 的控制台执行代码一样,所以不使用 javascript:
。
附带说明,javascript:
前缀用于从 URL 执行 JavaScript(您可以通过 键入(不是复制粘贴)javascript: alert('howdy')
到您的地址栏中来测试浏览器)。
【讨论】:
以上是关于将本地存储从 swift 注入到 WKWebview的主要内容,如果未能解决你的问题,请参考以下文章
从应用程序的文档目录加载本地 html 文件 swift wkwebview
Swift - 如何将本地存储的对象数组(文件管理器)转换为较新的对象? (带有附加属性)