如何使用swift将功能传递给网页?
Posted
技术标签:
【中文标题】如何使用swift将功能传递给网页?【英文标题】:How to pass function to webpage using swift? 【发布时间】:2019-03-18 05:24:33 【问题描述】:我有一种情况,我需要通过网页中的按钮单击来捕获事件。
此代码在网页上单击按钮。
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 项目中实现这一点?任何朝着正确方向的帮助或节点都会很棒。
【问题讨论】:
你可以研究一些 webkit+javascript 的例子。 robkerr.com/… 它的有效问题......为什么它被否决了? 【参考方案1】:在 ViewDidLoad() 中添加这个
let config = WKWebViewConfiguration()
let contentController = WKUserContentController()
contentController.add(self, name: "function")
config.userContentController = contentController
webView = WKWebView(frame: .zero, configuration: config)
从 WKNavigationDelegate 委托中添加两个方法:
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 委托中获取回调:
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 的配置时。
【讨论】:
【参考方案2】:您可以使用此WebViewJavascriptBridge 在 Obj-C/Swift 和 JavaScript 之间发送消息。
您也可以在不使用任何第三方读取this 的情况下做到这一点。
【讨论】:
以上是关于如何使用swift将功能传递给网页?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 将 Float 制服传递给 iOS 金属着色器?
如何使用 swift 2.2 从“performSegueWithIdentifier”按钮将视频字段传递给 AVPlayer 控制器
如何在使用 Swift 关闭 ViewController 期间将值从 ViewController B 传递给 ViewController A? [复制]