gpt4 book ai didi

javascript - 如何将值从 javascript 传递到 iOS UIWebView

转载 作者:行者123 更新时间:2023-11-28 05:58:28 25 4
gpt4 key购买 nike

我需要将 javascript 变量传递给 iOS UIWebView,我在 Android 上很容易做到这一点,但不能在这里做到。

我需要的是我将在 webview 中单击一个链接,该链接将依次使用一些参数调用此 JS 函数 buttonClickPAs,我希望我在 webside 中传递的所有参数 native 快速代码。不仅仅是调用那个 JS 函数并在 swift 中返回它的值。

我将在下面添加整个 html 代码

<html>
<head>
<script type="text/javascript">
function buttonClickPAss(a,b,c)
{
// console.log(action);

return a;// return what i passed to the function that is valueA
}
</script>
</head>
<body>
<b><a href='#' onclick="buttonClickPAss('valueA','valueB','valueC');"> Click here from webview</a></b>
</body>
</html>

加载 html 页面时会填充“valueA”、“valueB”和“valueC”,我需要在我的 swift 代码中使用这些值

然后我将在 webview 中加载上面的 html 页面并单击 webview 中的链接以便调用 JS 函数,因为我的值正在网页中填充。

这是我在android中试过的教程

https://capdroidandroid.wordpress.com/2015/07/03/how-send-data-from-javascript-to-native-android-app/

但是当我在 ios 中搜索相同内容时,我找到了这个教程

<script type="text/javascript">
function buttonClickPAss()
{
// console.log(action);

return 'hi from js';
}
</script>

上面是我的js代码

在 native swift 中,我在加载 url 后给出了这段代码

 func webView(_ webView: UIWebView, shouldStartLoadWithRequest request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {

let url = request.url!
let result = webView.stringByEvaluatingJavaScript(from: "buttonClickPAss()")
print("Result = ",result!)

return true
}

上面的代码工作正常,当我点击触发这个 js 函数的链接时,我在我的 xcode 中得到了“hi from js”的日志

但是我需要将值传递给函数 buttonClickPAs 所以我将上面的代码更改为这个

在 JS 中

<script type="text/javascript">
function buttonClickPAss(a,b,c)
{
// console.log(action);

return a;// return what i passed to the function
}
</script>

在 swift 方面,我将上面的 swift 代码更改为此

 func webView(_ webView: UIWebView, shouldStartLoadWithRequest request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {

let url = request.url!
let result = webView.stringByEvaluatingJavaScript(from: "buttonClickPAss(a,b,c)")
print("Result = ",result!)

return true
}

但是这里的“结果”没有打印任何东西,

我也搜索了其他教程,到处都是处理空参数函数的地方,有人能帮帮我吗

另外注意,根据上面的android教程,我可以将js变量分三个变量分别传递给android,ios swift中有类似的机制吗?最坏的情况我会把它变成一个 json 字符串并将它作为一个字符串返回

请帮忙

谢谢

最佳答案

import UIKit
import WebKit
class ViewController: UIViewController {
@IBOutlet weak var webView: WKWebView!
var activityIndicator: UIActivityIndicatorView?
func setupWebView(){
webView.navigationDelegate = self
activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray)
activityIndicator?.center = self.view.center
self.view.addSubview(activityIndicator!)
webView.load(URLRequest(url: URL(string: "YourWebSiteLinkHere")!))
webView.configuration.userContentController.add(self, name: "myInterface")
webView.evaluateJavaScript(s, completionHandler: {(string,error) in
print(error ?? "no error")
})
activityIndicator?.startAnimating()
}

override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
setupWebView()
}
}
extension ViewController: WKScriptMessageHandler{
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print("Message received: \(message.name) with body: \(message.body)")
}
}
extension ViewController: WKNavigationDelegate{
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
self.activityIndicator?.stopAnimating()
self.activityIndicator?.removeFromSuperview()
self.activityIndicator = nil
}
}

在html代码中

<script type="text/javascript">
function buttonClickPAss(a,b,c){
//The following line will pass the a to swift
window.webkit.messageHandlers.myInterface.postMessage(a)
}
</script>

在上面的代码中,我注册了“myInterface”。因此,无论何时你想从 JavaScript 向 Swift 提供数据,你都可以轻松地做到这一点。现在在您的示例中,当用户单击链接按钮时;将调用 buttonClickPAs。现在在你的 buttonClickPAss 方法中 window.webkit.messageHandlers.myInterface.postMessage(a) 行将在 func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) 中将变量数据传递给 Swift 方法。

我认为这应该足以解决您的问题。如需更多信息,请访问此 SO

关于javascript - 如何将值从 javascript 传递到 iOS UIWebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50642609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com