没有运行带有javascript的Swift WKWebView界面

问题描述 投票:0回答:1

我只使用swift 4.0(iOS 12.1)使用WKWebView构建我的应用程序

我需要从在线html运行我的javascript,但是如果我将url从索引移动到另一个页面,我的打印消息根本不起作用。

    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.com/index") // of course https://
    let request = URLRequest(url: url!)
    webview.load(request)

当我移动到webView中的另一个html页面时,我错过了userContentController。索引页面可以调用此页面,但另一页面不会调用任何函数。

index.html(ok) - >链接到a.html - > a.html(不行) - >链接到index.html - > index.html(ok)

不要叫这个:

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

我甚至无法得到任何消息“打印出来”。如何在我的代码中激活userContentController?

javascript swift webview call wkwebview
1个回答
0
投票

必须通过WKPreferences启用Javascript。您可以在WKWebViewConfiguration的preferences字段中指定这些。默认情况下禁用Javascript。

您只需将首选项对象的javaScriptEnabled字段设置为true。可以通过首选项对象更改几个有用的设置。我想请你看一下文档。

具体来说,初始化WKWebView的代码应如下所示。

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您可能还想看看this question。我不是将你的标记重复,因为你的问题询问为什么javascript不起作用,而不是如何启用它。

© www.soinside.com 2019 - 2024. All rights reserved.