最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Inject local storage from swift to WKWebview - Stack Overflow

programmeradmin7浏览0评论

My Swift Code:

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})

Any idea what's wrong?

My Swift Code:

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})

Any idea what's wrong?

Share Improve this question edited Dec 15, 2017 at 12:18 technerd 14.5k11 gold badges65 silver badges92 bronze badges asked Dec 15, 2017 at 12:18 Vivek KumarVivek Kumar 4065 silver badges15 bronze badges 2
  • Try removing the javascript: . – paulvs Commented Dec 15, 2017 at 12:30
  • Still the same error message in console: Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo={WKJavaScriptExceptionLineNumber=1, WKJavaScriptExceptionMessage=SecurityError (DOM Exception 18): The operation is insecure., WKJavaScriptExceptionColumnNumber=13, WKJavaScriptExceptionSourceURL=about:blank, NSLocalizedDescription=A JavaScript exception occurred} – Vivek Kumar Commented Dec 18, 2017 at 5:10
Add a ment  | 

2 Answers 2

Reset to default 6
//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.sstatic/tzGUc.png

Since evaluateJavaScript executes code as if from the Console of Safari Inspector, the javascript: is not used.

On a side note, the javascript: prefix is used to execute JavaScript from a URL (you can test this by typing (not copy-pasting) javascript: alert('howdy') into the address bar of your browser).

发布评论

评论列表(0)

  1. 暂无评论