gpt4 book ai didi

ios - 如何使用swift将函数传递给网页?

转载 作者:行者123 更新时间:2023-11-28 10:32:55 27 4
gpt4 key购买 nike

我有一种情况需要从网页中的按钮单击中捕获事件。

此代码在网页上单击按钮。

okCoolClick = () => {
/*eslint-disable* /
console.log("okay cool ", window.okCool);
if (window.okCool) {
okCool.performClick();
} else {
window.open("some-url");
}
};

现在 Android 团队已经用下面的代码解决了这个问题。

commonWebView.addJavascriptInterface(object : Any() {
@JavascriptInterface
fun performClick() {
val ownerId = arguments?.getInt(OWNER_ID)
if (ownerId == -1) {
context?.startActivity<RightNavigationActivity>()
activity?.finishAffinity()
} else {
context?.startActivity<HomeItemListActivity>(
Pair(HomeItemListActivity.INTENT_EXTRA_COMPONENT,
AppConstants.HOME_SUB_LIST_CLUB_OUTLET_LIST),
Pair(HomeItemListActivity.INTENT_EXTRA_CLUB_ID, ownerId),
Pair(HomeItemListActivity.INDUSTRY_ID, -1)
)
activity?.finish()
}
}
}, "okCool")

所以,现在我只剩下在 iOS 中寻找解决方案了,

如何在我的 iOS 项目中实现这一点?任何指向正确方向的帮助或节点都会很棒。

最佳答案

在 ViewDidLoad() 中添加这个

let config = WKWebViewConfiguration()
let contentController = WKUserContentController()
contentController.add(self, name: "function")
config.userContentController = contentController
webView = WKWebView(frame: .zero, configuration: config)

从 WKNavigationDelegate 委托(delegate)中添加两个方法:

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
return decisionHandler(.allow)
}

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
{
if navigationAction.navigationType == WKNavigationType.linkActivated, let url = navigationAction.request.url{
DeepLink.deepLink(url.absoluteString)
}
return decisionHandler(.allow)
}

最后添加最重要的方法来从 WKScriptMessageHandler 委托(delegate)中获取回调:

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage){
let dataFromWeb = message.body //Data Passed from webview
}

像这样从html传递数据

var myObj = {"name":"John", "age":30, "car":null};
window.webkit.messageHandlers.function.postMessage(myObj);

“函数”名称在上面的语句中应该相同,并且当您将 userContentController 添加为您的 webview 的配置时。

关于ios - 如何使用swift将函数传递给网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55214978/

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