要实现Angular/HTML5与iOS WKWebView之间的通信,可以使用JavaScript与Objective-C之间的交互方式。以下是一个解决方案的示例代码:
在HTML页面中:
// 发送消息给iOS
function sendMessageToiOS(message) {
window.webkit.messageHandlers.iOSNative.postMessage(message);
}
// 接收来自iOS的消息
function receiveMessageFromiOS(message) {
console.log('Received message from iOS:', message);
}
在Angular组件中:
import { Component } from '@angular/core';
// 发送消息给iOS
function sendMessageToiOS(message) {
window.webkit.messageHandlers.iOSNative.postMessage(message);
}
// 接收来自iOS的消息
function receiveMessageFromiOS(message) {
console.log('Received message from iOS:', message);
}
@Component({
selector: 'app-root',
template: `
`
})
export class AppComponent {
sendMessageToiOS(message) {
sendMessageToiOS(message);
}
receiveMessageFromiOS(message) {
receiveMessageFromiOS(message);
}
}
在iOS中:
#import
@interface ViewController : UIViewController
@property (nonatomic, strong) WKWebView *webView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
[config.userContentController addScriptMessageHandler:self name:@"iOSNative"];
self.webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:config];
self.webView.UIDelegate = self;
self.webView.navigationDelegate = self;
[self.view addSubview:self.webView];
NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
NSURL *htmlURL = [NSURL fileURLWithPath:htmlPath];
[self.webView loadRequest:[NSURLRequest requestWithURL:htmlURL]];
}
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
if ([message.name isEqualToString:@"iOSNative"]) {
NSLog(@"Received message from HTML: %@", message.body);
// 执行iOS相关操作
}
}
@end
这样,你就可以在Angular/HTML页面中调用sendMessageToiOS
函数发送消息给iOS,并在iOS的didReceiveScriptMessage
方法中接收并处理消息。