将JavaScript变量传递给Swift
如何根据JavaScript变量更改Swift变量的值?(将JavaScript变量传递给Swift) 我的目标只是使用JavaScript变量执行一个if语句,然后在此基础上编辑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
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!