js与iOS的交互

在现代移动应用开发中,JavaScript(JS)与iOS之间的交互是一个常见的需求,特别是在混合应用或者Web视图(如WKWebView)的场景下。通过这样的交互,开发者可以利用JS的灵活性和丰富的前端库来构建用户界面,同时利用iOS原生的能力提供高性能和深度集成的功能。本文将深入探讨这一主题,详细介绍如何实现JS与iOS之间的通信。我们要理解iOS是如何加载和处理H5(HTML5)页面的。在iOS应用中,通常使用UIWebView或WKWebView组件来显示Web内容。UIWebView是早期的解决方案,而WKWebView是苹果后来推出的性能更好、更安全的选择。两者都提供了与JavaScript交互的API。对于UIWebView,主要使用`stringByEvaluatingJavaScriptFromString:`方法执行JavaScript代码,并通过代理方法`webView:didFinishLoad:`来判断页面是否加载完成。例如,你可以这样获取H5页面的数据: ```swift webView.stringByEvaluatingJavaScriptFromString("document.title") { title in print(title) } ```对于WKWebView,交互则更为灵活,它引入了`WKUserContentController`,可以注册JavaScript函数并监听它们的调用。你需要创建一个WKUserContentController对象,设置其用户脚本,并将其添加到WKWebView配置中: ```swift let userContentController = WKUserContentController() userContentController.add(self, name: "handleMessage") let configuration = WKWebViewConfiguration() configuration.userContentController = userContentController let webView = WKWebView(frame: .zero, configuration: configuration) ```然后,你需要实现`WKScriptMessageHandler`协议,处理来自JavaScript的消息: ```swift func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { if message.name == "handleMessage" { print(message.body) } } ```在H5页面中,你可以通过`window.webkit.messageHandlers.handleMessage.postMessage(data)`来发送消息给iOS原生代码。对于点击H5页面按钮响应OC,你可以在JavaScript中定义一个函数,然后通过`WKWebView`的API触发这个函数。例如,当用户点击按钮时,你可能希望执行以下JavaScript: ```javascript function callNativeFunction() { window.webkit.messageHandlers.nativeAction.postMessage('Button clicked'); } ```在iOS端,你将在`userContentController(_:didReceive:)`中处理这个消息并采取相应的行动。总结来说,JS与iOS的交互涉及以下几个关键技术点: 1.使用UIWebView或WKWebView展示H5页面。 2. UIWebView使用`stringByEvaluatingJavaScriptFromString:`执行JavaScript。 3. WKWebView利用`WKUserContentController`和`WKScriptMessageHandler`进行双向通信。 4.在JavaScript中定义函数并调用`window.webkit.messageHandlers`发送消息给原生代码。 5. iOS端监听并处理来自JavaScript的消息。通过这些技术,开发者可以实现动态更新界面、获取页面状态、触发原生功能等多种交互,提升用户体验。在实际项目中,还应注意性能优化、安全问题以及跨平台兼容性,确保应用的稳定性和高效性。
zip
JS与OC交互.zip 预估大小:64个文件
folder
JS与OC交互 文件夹
folder
JS与OC交互.xcodeproj 文件夹
folder
project.xcworkspace 文件夹
file
contents.xcworkspacedata 173B
folder
xcuserdata 文件夹
folder
ZhenHao.xcuserdatad 文件夹
file
UserInterfaceState.xcuserstate 17KB
folder
xcuserdata 文件夹
folder
ZhenHao.xcuserdatad 文件夹
folder
xcschemes 文件夹
file
xcschememanagement.plist 665B
file
JS与OC交互.xcscheme 4KB
file
project.pbxproj 21KB
folder
JS与OC交互 文件夹
file
ViewController.m 3KB
file
Info.plist 1KB
file
main.m 334B
file
firstViewController.m 1KB
folder
Base.lproj 文件夹
file
LaunchScreen.storyboard 2KB
file
Main.storyboard 2KB
file
ViewController.h 947B
file
AppDelegate.h 277B
folder
Assets.xcassets 文件夹
folder
AppIcon.appiconset 文件夹
file
Contents.json 1KB
file
firstViewController.h 223B
file
test.html 611B
file
AppDelegate.m 2KB
file
.DS_Store 6KB
folder
JS与OC交互Tests 文件夹
file
Info.plist 733B
file
JS_OC__Tests.m 899B
folder
JS与OC交互UITests 文件夹
file
Info.plist 733B
file
JS_OC__UITests.m 1KB
folder
.git 文件夹
folder
logs 文件夹
file
HEAD 157B
folder
refs 文件夹
folder
heads 文件夹
file
master 157B
folder
info 文件夹
file
exclude 40B
file
index 3KB
file
COMMIT_EDITMSG 15B
folder
objects 文件夹
folder
pack 文件夹
folder
03 文件夹
file
452523c82083c36a24d8bb8c1dae60422fea7a 51B
folder
02 文件夹
file
92fd13755a8b44ee600d1d9be5127b71228bbd 61B
folder
1d 文件夹
file
e2839f538010ca54f7fec587054b5c7182a690 92B
folder
info 文件夹
folder
db 文件夹
file
3f0ce163c8033a175d27de6a4e96aadc115625 59B
folder
35 文件夹
file
b5032252174a4ad4651a55a0ce58f8cc727d0e 331B
folder
04 文件夹
file
1d0b9e09480522cde9c73511498b3fcbd567cf 284B
folder
de 文件夹
file
68b9e63e648c6e37b0cda5b4319881e63676cb 659B
folder
40 文件夹
file
c6215d906736d7b2a439c17cf9ee0776580474 535B
folder
99 文件夹
file
3e75cd29ff7c5eab2b6d1e58ac1fa47ffab954 110B
folder
82 文件夹
file
2088ebcad8263c1ede6b490237824e4f131849 534B
folder
61 文件夹
file
783d05867938cef36837b34085073a918697bb 498B
folder
11 文件夹
file
16372d25083f3292d7a7cba0d330ab17d9404d 134B
folder
2e 文件夹
file
721e1833f03bb0e1b962a84491d7e43e3fef9c 753B
folder
5e 文件夹
file
cc5560936a5445a2bf02d6f7ce4537d7a2d6b0 95B
folder
88 文件夹
file
5c81679932d5e7e60d0701543a90bb158dcd7f 935B
folder
81 文件夹
file
8159561a06fb0da7a1162ea0c6c68e231cf244 276B
file
181ec89e76371de79c8d41fbc1f321c6747df8 479B
folder
36 文件夹
file
d2c80d8893178d7e1f2964085b273959bfdc28 201B
folder
69 文件夹
file
227592a299e9fec278732071ae6ba14828fac8 972B
folder
f5 文件夹
file
6d2f3bb56e8474d49393008be744986bd41c3c 719B
folder
54 文件夹
file
8be297029868413991b7e0290282b3de1fa2dd 95B
folder
31 文件夹
file
7296cc33a0f2115ecd160f7755ebd33f464287 338B
folder
ce 文件夹
file
00bd10f591571e6a1860557b7948f02649c319 4KB
folder
3c 文件夹
file
cb4e0d1f250ac5776ffdce18d7c16524d9a21f 240B
folder
68 文件夹
file
eca28a3435c06bf892d12cd9d8967fb2a09dc6 148B
folder
07 文件夹
file
c99fbf363f25735bd4145b2f7ba6bfd60a4d03 131B
folder
ba 文件夹
file
72822e8728ef2951005e49b6c27a2f1da6572d 353B
folder
ef 文件夹
file
262a648c5236e7ac1cfb1a1467a2aa0f888f74 148B
folder
13 文件夹
file
3dff0256274ed87e6ac62c0d7c21c6ba42332f 187B
file
e41bdc1f33fb66b9e2106a9a882fad6f7a7282 184B
folder
22 文件夹
file
ccf0ed86d8dc3e94124c7e7291e27faf92e0c9 69B
folder
b0 文件夹
file
4364089fdc64fe3b81bcd41462dd55edb7a001 57B
file
HEAD 23B
file
config 137B
folder
refs 文件夹
folder
heads 文件夹
file
master 41B
folder
tags 文件夹
folder
hooks 文件夹
file
README.sample 177B
file
description 73B
...
zip 文件大小:68.15KB