将JavaScript变量传递给Swift

将JavaScript变量传递给Swift,javascript,ios,swift,webkit,Javascript,Ios,Swift,Webkit,如何根据JavaScript变量更改Swift变量的值?(将JavaScript变量传递给Swift) 我的目标只是使用JavaScript变量执行一个if语句,然后在此基础上编辑swift变量 我正在尝试做的代码示例: var checkElement = false webView.evaluateJavaScript("var element = document.getElementById(\"element\");"){ (value, error) in if le

如何根据JavaScript变量更改Swift变量的值?(将JavaScript变量传递给Swift)

我的目标只是使用JavaScript变量执行一个if语句,然后在此基础上编辑swift变量

我正在尝试做的代码示例:

var checkElement = false
webView.evaluateJavaScript("var element = document.getElementById(\"element\");"){ (value, error) in
        if let err = error {
            print(err)
        }
}
if (element != null){
checkElement = true
}

我理解这不会起作用,因为元素只存在于JavaScript中。尽管如此,如何将元素变量传递给Swift?

您可以通过截取单击的URL,通过
UIWebViewDelegate
方法
webView:shouldStartLoadWithRequest:navigationType:

在JS中通过
iframe
模拟单击即可

这是Objective-C中的一个示例,但Swift中的示例相同-

您可以通过截取单击的URL,通过
UIWebViewDelegate
方法
webView:shouldStartLoadWithRequest:navigationType:

在JS中通过
iframe
模拟单击即可

这是Objective-C中的一个示例,但Swift中的示例相同-
我想我会自己回答这个问题

首先,确保您的类符合正确的协议:
WKScriptMessageHandler
是必需的,您可能还需要
WKNavigationDelegate

在初始化WKWebView之前,将userContentController添加到其配置中。这将充当从JavaScript到Swift的“桥梁”

var webView = WKWebView()
let configuration = WKWebViewConfiguration()
configuration.userContentController.add(self, name: "messageName")
webView = WKWebView(frame: .zero, configuration: configuration)
现在初始化
userContentController()
函数并处理其中接收的内容。前

public func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    print("Name: \(message.name)")
    print("Body: \(message.body as! String)")
}
现在在
evaluateJavaScript()中的JavaScript中添加以下行以将任何数据推送到Swift:

window.webkit.messageHandlers['messageName'].postMessage('Message Body!');
现在,当JavaScript行被调用时,Swift将输出以下内容:

Name: messageName
Body: Message Body!

我想我会自己回答这个问题

首先,确保您的类符合正确的协议:
WKScriptMessageHandler
是必需的,您可能还需要
WKNavigationDelegate

在初始化WKWebView之前,将userContentController添加到其配置中。这将充当从JavaScript到Swift的“桥梁”

var webView = WKWebView()
let configuration = WKWebViewConfiguration()
configuration.userContentController.add(self, name: "messageName")
webView = WKWebView(frame: .zero, configuration: configuration)
现在初始化
userContentController()
函数并处理其中接收的内容。前

public func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    print("Name: \(message.name)")
    print("Body: \(message.body as! String)")
}
现在在
evaluateJavaScript()中的JavaScript中添加以下行以将任何数据推送到Swift:

window.webkit.messageHandlers['messageName'].postMessage('Message Body!');
现在,当JavaScript行被调用时,Swift将输出以下内容:

Name: messageName
Body: Message Body!