Swift WKWebView interface with javascript is not run - Stack Overflow

I just build my app with WKWebView with swift 4.0 (iOS 12.1)I need to run my javascript from online htm

I just build my app with WKWebView with swift 4.0 (iOS 12.1)

I need to run my javascript from online html, However if I move url from index to another page, my print message does not working at all.

    let contentController = WKUserContentController()
    contentController.add(self, name: "myHandler") 

    let configuration = WKWebViewConfiguration()
    configuration.userContentController = contentController

    webview = WKWebView(frame: self.view.frame, configuration: configuration)
    webview.uiDelegate = self
    webview.navigationDelegate = self
    self.view = self.webview


override func viewDidLoad() {
    super.viewDidLoad()
    let url = URL(string: "example/index") // of course https://
    let request = URLRequest(url: url!)
    webview.load(request)

I missed userContentController when I move to another html page in the webView. Index page can call this one but another page do not call any function.

index.html(ok) -> link to a.html -> a.html (not ok) -> link to index.html -> index.html(ok)

Do not Call this one :

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    print("call print out")
    if message.name == "myHandler" {
        print("JS -> Native Call \(message.body)")
        abc()
    } else {
        print("JS -> Native N/A")
    }
}

I cannot get any message even "call print out" at all. How can I active userContentController in my code?

I just build my app with WKWebView with swift 4.0 (iOS 12.1)

I need to run my javascript from online html, However if I move url from index to another page, my print message does not working at all.

    let contentController = WKUserContentController()
    contentController.add(self, name: "myHandler") 

    let configuration = WKWebViewConfiguration()
    configuration.userContentController = contentController

    webview = WKWebView(frame: self.view.frame, configuration: configuration)
    webview.uiDelegate = self
    webview.navigationDelegate = self
    self.view = self.webview


override func viewDidLoad() {
    super.viewDidLoad()
    let url = URL(string: "example./index") // of course https://
    let request = URLRequest(url: url!)
    webview.load(request)

I missed userContentController when I move to another html page in the webView. Index page can call this one but another page do not call any function.

index.html(ok) -> link to a.html -> a.html (not ok) -> link to index.html -> index.html(ok)

Do not Call this one :

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    print("call print out")
    if message.name == "myHandler" {
        print("JS -> Native Call \(message.body)")
        abc()
    } else {
        print("JS -> Native N/A")
    }
}

I cannot get any message even "call print out" at all. How can I active userContentController in my code?

Share Improve this question edited Apr 13, 2019 at 9:14 Richard asked Apr 12, 2019 at 14:57 RichardRichard 3514 silver badges18 bronze badges 5
  • Did you added App Transport Security Settings in your info.plist file? You can have a look to this question: stackoverflow./questions/32456848/… – axel Commented Apr 12, 2019 at 15:18
  • Sure, All of my url is using with https protocol. – Richard Commented Apr 12, 2019 at 15:31
  • @axel Finally I found that this was caused by Xcode 10.2 bugs.. Xcode 10.1 do not report any issue for this... :( I appreciate your assist axel :) – Richard Commented Apr 14, 2019 at 13:07
  • Glad that you figured it out @Richard – axel Commented Apr 15, 2019 at 8:02
  • @Richard do you remember what exactly the issue was or how you found it? I'm running into the same problem, javascript code works on iOS 12 and 12.2 but not on 12.1. Any hints? – André Herculano Commented Jul 11, 2019 at 16:28
Add a ment  | 

2 Answers 2

Reset to default 2

Javascript must be enabled through WKPreferences. You can specify these in the preferences field of you WKWebViewConfiguration. Javascript is disabled by default.

You simply need to set the javaScriptEnabled field of the preferences object to true. There are several useful settings that can be changed by the preferences object. I would urge you to look at the documentation.

Specifically your code to initialize the WKWebView should look like this.

let contentController = WKUserContentController()
contentController.add(self, name: "myHandler") 

let configuration = WKWebViewConfiguration()
configuration.userContentController = contentController
configuration.preferences = WKPreferences()
configuration.preferences.javaScriptEnabled = true

webview = WKWebView(frame: self.view.frame, configuration: configuration)
webview.uiDelegate = self
webview.navigationDelegate = self
self.view = self.webview

PS You may also want to have a look at this question. I'm not marking yours as a duplicate because your question asks why javascript isn't working, not how to enable it.

EDIT: JavaScript is now enabled by default. This answer is no longer accurate.

Correct usage as of iOS 14+

let contentController = WKUserContentController()
contentController.add(self, name: "myHandler") 

let configuration = WKWebViewConfiguration()
configuration.userContentController = contentController
configuration.preferences = WKPreferences()

// Here's the new magic for iOS 14:
let webPageDefaultPrefs = WKWebpagePreferences()
webPageDefaultPrefs.allowsContentJavaScript = true
config.defaultWebpagePreferences = webPageDefaultPrefs

webview = WKWebView(frame: self.view.frame, configuration: configuration)
webview.uiDelegate = self
webview.navigationDelegate = self
self.view = self.webview

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745520087a4631220.html

相关推荐

  • Swift WKWebView interface with javascript is not run - Stack Overflow

    I just build my app with WKWebView with swift 4.0 (iOS 12.1)I need to run my javascript from online htm

    1天前
    40

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信