ios开发 WKWebView 与 H5交互
https://blog.csdn.net/wds326598/article/details/105009622/
需求:
需要在手机端用WKWebView加载链接展示html,并且需要与html中按钮做交互
实现:
-
-
-
@interface ViewController ()<WKScriptMessageHandler,WKNavigationDelegate>
-
@property(nonatomic,strong) WKWebView *webView ;
-
@end
-
static NSString *strID = @"pullnewactive";
-
- (void)viewDidLoad {
-
[super viewDidLoad];
-
// Do any additional setup after loading the view.
-
self.title = self.titleName;
-
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
-
//strID: H5界面的标识符
-
WKUserContentController * wkUController = [[WKUserContentController alloc] init];
-
[wkUController addScriptMessageHandler:self name:strID];
-
config.userContentController = wkUController;
-
//创建WKWebView
-
self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight) configuration:config];
-
self.webView.navigationDelegate = self;
-
[self.view addSubview:self.webView];
-
//加载url
-
NSURL * baseUrl = [NSURL URLWithString:self.urlStr];
-
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:baseUrl];
-
[_webView loadRequest:request];
-
}
-
-
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{
-
// NSDictionary * parameter = message.body; 如果带参数可以从parameter获取
-
if([message.name isEqualToString:strID]){//点击按钮执行的方法
-
-
}
-
}
-
-
//WKWebView自带可以长按保存图片,加上下面代码,可以取消长按保存图片
-
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
-
//禁止保存图片
-
[self.webView evaluateJavaScript:@"document.documentElement.style.webkitUserSelect='none'" completionHandler:nil];
-
[self.webView evaluateJavaScript:@"document.documentElement.style.webkitTouchCallout='none'" completionHandler:nil];
-
-
}
-
//移除注册的js方法(注意需要移除)
-
-(void)dealloc{
-
[[_webView configuration].userContentController removeScriptMessageHandlerForName:strID];
-
}
-
//如果H5界面有电话需要添加,拨打电话时调用
-
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
-
NSURL *URL = navigationAction.request.URL;
-
NSString *scheme = [URL scheme];
-
if ([scheme isEqualToString:@"tel"]) {
-
NSString *resourceSpecifier = [URL resourceSpecifier];
-
NSString *callPhone = [NSString stringWithFormat:@"telprompt://%@", resourceSpecifier];
-
/// 防止iOS 10及其之后,拨打电话系统弹出框延迟出现
-
dispatch_async(dispatch_get_global_queue(0, 0), ^{
-
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone]];
-
});
-
}
-
decisionHandler(WKNavigationActionPolicyAllow);
-
}
HTML中需要在按钮点击事件中实现:
-
//不带参数 (pullnewactive)标识符
-
function jsToOcFunction1(){
-
window.webkit.messageHandlers.pullnewactive.postMessage({});
-
}
-
//带参数 (jsToOcWithPrams)标识符
-
function jsToOcFunction2(){
-
window.webkit.messageHandlers.jsToOcWithPrams.postMessage({"params":"我是参数"});
-
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2015-10-10 iOS 9 学习系列:Split Screen Multitasking
2015-10-10 iOS9新系统下App Store应用上传新指南
2014-10-10 iOS block的用法