From 2c8142c0d2210767f6e12c4524b056096aef51bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E4=BC=9F?= <53408947@qq.com> Date: Mon, 10 Nov 2025 16:09:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0webview=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xcschemes/xcschememanagement.plist | 125 +++++++++---- keyBoard.xcodeproj/project.pbxproj | 14 ++ .../UserInterfaceState.xcuserstate | Bin 40520 -> 71389 bytes keyBoard/Class/Shop/VC/KBShopVC.m | 2 + .../Class/WebView/KBWebViewViewController.h | 18 ++ .../Class/WebView/KBWebViewViewController.m | 177 ++++++++++++++++++ 6 files changed, 296 insertions(+), 40 deletions(-) create mode 100644 keyBoard/Class/WebView/KBWebViewViewController.h create mode 100644 keyBoard/Class/WebView/KBWebViewViewController.m diff --git a/Pods/Pods.xcodeproj/xcuserdata/zhangwei.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/zhangwei.xcuserdatad/xcschemes/xcschememanagement.plist index de03d1d..4b5efaf 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/zhangwei.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Pods/Pods.xcodeproj/xcuserdata/zhangwei.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,73 +7,118 @@ AFNetworking.xcscheme_^#shared#^_ orderHint - 15 + 9 Bugly.xcscheme_^#shared#^_ orderHint - 4 + 16 DZNEmptyDataSet.xcscheme_^#shared#^_ orderHint - 9 + 12 - LookinServer.xcscheme_^#shared#^_ + FLAnimatedImage.xcscheme_^#shared#^_ orderHint - 6 + 15 - MBProgressHUD.xcscheme_^#shared#^_ + HWPanModal.xcscheme_^#shared#^_ orderHint 5 - MJExtension-MJExtension.xcscheme_^#shared#^_ - - orderHint - 3 - - MJExtension.xcscheme_^#shared#^_ - - orderHint - 13 - - MJRefresh-MJRefresh.Privacy.xcscheme_^#shared#^_ - - orderHint - 10 - - MJRefresh.xcscheme_^#shared#^_ - - orderHint - 7 - - Masonry.xcscheme_^#shared#^_ - - orderHint - 11 - - Pods-CustomKeyboard.xcscheme_^#shared#^_ - - orderHint - 12 - - Pods-keyBoard.xcscheme_^#shared#^_ + JXCategoryView-JXCategoryView.xcscheme_^#shared#^_ orderHint 2 - SDWebImage-SDWebImage.xcscheme_^#shared#^_ + JXCategoryView.xcscheme_^#shared#^_ orderHint - 14 + 21 - SDWebImage.xcscheme_^#shared#^_ + JXPagingView-JXPagerView.xcscheme_^#shared#^_ + + orderHint + 11 + + JXPagingView.xcscheme_^#shared#^_ + + orderHint + 17 + + LSTPopView.xcscheme_^#shared#^_ orderHint 8 + LSTTimer.xcscheme_^#shared#^_ + + orderHint + 13 + + LYEmptyView.xcscheme_^#shared#^_ + + orderHint + 6 + + LookinServer.xcscheme_^#shared#^_ + + orderHint + 7 + + MBProgressHUD.xcscheme_^#shared#^_ + + orderHint + 19 + + MJExtension-MJExtension.xcscheme_^#shared#^_ + + orderHint + 4 + + MJExtension.xcscheme_^#shared#^_ + + orderHint + 23 + + MJRefresh-MJRefresh.Privacy.xcscheme_^#shared#^_ + + orderHint + 14 + + MJRefresh.xcscheme_^#shared#^_ + + orderHint + 18 + + Masonry.xcscheme_^#shared#^_ + + orderHint + 22 + + Pods-CustomKeyboard.xcscheme_^#shared#^_ + + orderHint + 3 + + Pods-keyBoard.xcscheme_^#shared#^_ + + orderHint + 10 + + SDWebImage-SDWebImage.xcscheme_^#shared#^_ + + orderHint + 24 + + SDWebImage.xcscheme_^#shared#^_ + + orderHint + 20 + diff --git a/keyBoard.xcodeproj/project.pbxproj b/keyBoard.xcodeproj/project.pbxproj index 3a4de1b..322d1bb 100644 --- a/keyBoard.xcodeproj/project.pbxproj +++ b/keyBoard.xcodeproj/project.pbxproj @@ -117,6 +117,7 @@ 04FC97092EB31B14007BD342 /* KBHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 04FC97082EB31B14007BD342 /* KBHUD.m */; }; 04FC970E2EB334F8007BD342 /* UIImageView+KBWebImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 04FC970B2EB334F8007BD342 /* UIImageView+KBWebImage.m */; }; 04FC970F2EB334F8007BD342 /* KBWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 04FC970D2EB334F8007BD342 /* KBWebImageManager.m */; }; + 7276DDA82EC1B28300804C36 /* KBWebViewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7276DDA72EC1B28300804C36 /* KBWebViewViewController.m */; }; 7A36414DFDA5BEC9B7D2E318 /* Pods_CustomKeyboard.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C1092FB2B452F95B15D4263 /* Pods_CustomKeyboard.framework */; }; A1B2C3D42EB0A0A100000001 /* KBFunctionTagCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C3D32EB0A0A100000001 /* KBFunctionTagCell.m */; }; A1B2C3E22EB0C0A100000001 /* KBNetworkManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C3E12EB0C0A100000001 /* KBNetworkManager.m */; }; @@ -347,6 +348,8 @@ 04FC98012EB36AAB007BD342 /* KBConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBConfig.h; sourceTree = ""; }; 2C1092FB2B452F95B15D4263 /* Pods_CustomKeyboard.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CustomKeyboard.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 51FE7C4C42C2255B3C1C4128 /* Pods-keyBoard.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-keyBoard.release.xcconfig"; path = "Target Support Files/Pods-keyBoard/Pods-keyBoard.release.xcconfig"; sourceTree = ""; }; + 7276DDA62EC1B28300804C36 /* KBWebViewViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBWebViewViewController.h; sourceTree = ""; }; + 7276DDA72EC1B28300804C36 /* KBWebViewViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBWebViewViewController.m; sourceTree = ""; }; 727EC7532EAF848B00B36487 /* keyBoard.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = keyBoard.app; sourceTree = BUILT_PRODUCTS_DIR; }; 967065BB5230E43F293B3AF9 /* Pods_keyBoard.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_keyBoard.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A1B2C3D22EB0A0A100000001 /* KBFunctionTagCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBFunctionTagCell.h; sourceTree = ""; }; @@ -853,6 +856,7 @@ 04FC95BF2EB1E3B1007BD342 /* Class */ = { isa = PBXGroup; children = ( + 7276DDA22EC1B22500804C36 /* WebView */, 048908D32EBF618E00FABA60 /* Vender */, 048908C02EBE329D00FABA60 /* Search */, 048908B92EBDC11200FABA60 /* Common */, @@ -1065,6 +1069,15 @@ name = Frameworks; sourceTree = ""; }; + 7276DDA22EC1B22500804C36 /* WebView */ = { + isa = PBXGroup; + children = ( + 7276DDA62EC1B28300804C36 /* KBWebViewViewController.h */, + 7276DDA72EC1B28300804C36 /* KBWebViewViewController.m */, + ); + path = WebView; + sourceTree = ""; + }; 727EC74A2EAF848B00B36487 = { isa = PBXGroup; children = ( @@ -1352,6 +1365,7 @@ 047C65102EBCA8DD0035E841 /* HomeRankContentVC.m in Sources */, 047C655C2EBCD0F80035E841 /* UIView+KBShadow.m in Sources */, 048908C32EBE32B800FABA60 /* KBSearchVC.m in Sources */, + 7276DDA82EC1B28300804C36 /* KBWebViewViewController.m in Sources */, 047C655E2EBCD5B20035E841 /* UIImage+KBColor.m in Sources */, 04FC95DD2EB202A3007BD342 /* KBGuideVC.m in Sources */, 04FC95E52EB220B5007BD342 /* UIColor+Extension.m in Sources */, diff --git a/keyBoard.xcworkspace/xcuserdata/zhangwei.xcuserdatad/UserInterfaceState.xcuserstate b/keyBoard.xcworkspace/xcuserdata/zhangwei.xcuserdatad/UserInterfaceState.xcuserstate index 0b4c054fd784e720e5a3bea1982bd0727b801b5b..db97225780264387b5f3bae6ed9b7bd27c1fccd0 100644 GIT binary patch literal 71389 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 Y8}GJeK2lR}eKMJUp8)#(W8=gB2awN3jQ{`u delta 20157 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 #import "KBShopItemVC.h" +#import "KBWebViewViewController.h" + static const CGFloat JXTableHeaderViewHeight = (323); static const CGFloat JXheightForHeaderInSection = 50; diff --git a/keyBoard/Class/WebView/KBWebViewViewController.h b/keyBoard/Class/WebView/KBWebViewViewController.h new file mode 100644 index 0000000..4d74711 --- /dev/null +++ b/keyBoard/Class/WebView/KBWebViewViewController.h @@ -0,0 +1,18 @@ +// +// KBWebViewViewController.h +// keyBoard +// +// Created by 张伟 on 2025/11/10. +// + +#import "BaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface KBWebViewViewController : BaseViewController + +@property(nonatomic,copy) NSString * url; + +@end + +NS_ASSUME_NONNULL_END diff --git a/keyBoard/Class/WebView/KBWebViewViewController.m b/keyBoard/Class/WebView/KBWebViewViewController.m new file mode 100644 index 0000000..d93e321 --- /dev/null +++ b/keyBoard/Class/WebView/KBWebViewViewController.m @@ -0,0 +1,177 @@ +// +// KBWebViewViewController.m +// keyBoard +// +// Created by 张伟 on 2025/11/10. +// + +#import "KBWebViewViewController.h" +#import + +@interface KBWebViewViewController () + +@property(nonatomic, strong) WKWebView * webView; +// 🟢 顶部加载进度条 +@property(nonatomic, strong) UIProgressView *progressView; +@property(nonatomic, assign) BOOL observingProgress; + +@end + +@implementation KBWebViewViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + [self configUI]; +} + +- (void)configUI { + // 1. 配置 JS 交互 + WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; + WKUserContentController *userContentController = [[WKUserContentController alloc] init]; + [userContentController addScriptMessageHandler:self name:@"keyBoard"]; + config.userContentController = userContentController; + + // 2. 创建 webView + self.webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:config]; + self.webView.navigationDelegate = self; + self.webView.translatesAutoresizingMaskIntoConstraints = NO; + self.webView.backgroundColor = UIColor.clearColor; + self.webView.frame = self.view.bounds; + [self.view addSubview:self.webView]; + + // 🟢 3. 顶部 2 像素进度条 + self.progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; + self.progressView.translatesAutoresizingMaskIntoConstraints = NO; + + self.progressView.trackTintColor = [UIColor clearColor]; // 背景透明 + self.progressView.progressTintColor = [UIColor greenColor]; + + self.progressView.progress = 0.0f; + self.progressView.hidden = YES; // 初始隐藏 + + [self.view addSubview:self.progressView]; + + // 约束:贴在最上面,高度 2 像素,左右撑满 + [NSLayoutConstraint activateConstraints:@[ + [self.progressView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor], + [self.progressView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [self.progressView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor], + [self.progressView.heightAnchor constraintEqualToConstant:2.0] + ]]; + + // 🟢 4. 监听 WKWebView 加载进度(estimatedProgress) + [self.webView addObserver:self + forKeyPath:@"estimatedProgress" + options:NSKeyValueObservingOptionNew + context:nil]; + self.observingProgress = YES; + + // 5. 加载 URL + NSURLRequest * req = [NSURLRequest requestWithURL:[NSURL URLWithString:self.url]]; + [self.webView loadRequest:req]; +} + +#pragma mark - KVO: 监听加载进度(estimatedProgress) 🟢 + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(id)object + change:(NSDictionary *)change + context:(void *)context { + if (object == self.webView && [keyPath isEqualToString:@"estimatedProgress"]) { + CGFloat progress = self.webView.estimatedProgress; + + // 0 ~ 1之间的进度 + self.progressView.hidden = NO; + [self.progressView setProgress:progress animated:YES]; + + if (progress >= 1.0f) { + // 加载完成后延迟一点点再隐藏,顺滑一点 + [UIView animateWithDuration:0.25 + delay:0.25 + options:UIViewAnimationOptionCurveEaseOut + animations:^{ + self.progressView.alpha = 0.0; + } completion:^(BOOL finished) { + self.progressView.progress = 0.0; + self.progressView.hidden = YES; + self.progressView.alpha = 1.0; + }]; + } + } else { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + } +} + +#pragma mark - WKNavigationDelegate + +// 开始加载 +- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation { + NSLog(@"开始加载url"); + // 开始加载时,确保进度条出现 + self.progressView.hidden = NO; + self.progressView.progress = 0.0; +} + +// 加载完成 +- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { + NSLog(@"页面加载成功"); + self.title = webView.title; +} + +// 加载失败 +- (void)webView:(WKWebView *)webView +didFailProvisionalNavigation:(WKNavigation *)navigation + withError:(NSError *)error { + NSLog(@"webView load error: %@", error); + // 失败时也把进度条收一下 + self.progressView.hidden = YES; + self.progressView.progress = 0.0; +} + +#pragma mark - WKScriptMessageHandler (JS 调原生) + +- (void)userContentController:(WKUserContentController *)userContentController + didReceiveScriptMessage:(WKScriptMessage *)message { + + if (![message.body isKindOfClass:NSDictionary.class]) { + NSLog(@"Body参数不合法"); + return; + } + + [self handleJSMethodWithParams:message.body]; +} + +- (void)handleJSMethodWithParams:(NSDictionary *)params { + NSDictionary * body = [params copy]; + NSLog(@"收到 JS 消息: %@", body); + NSString * type = body[@"type"]; + + // 测试打印 + if ([type isEqual:@"ONE_METHOD"]) { + NSLog(@"come on baby js 调用你的方法了"); + } + + // 修改title + if ([type isEqual:@"changeTiele"]) { + NSLog(@"%@", body); + NSString * newTiele = body[@"payload"][@"data"]; + self.title = newTiele; + } +} + +#pragma mark - Clean up 🟢 + +- (void)dealloc { + if (self.observingProgress) { + @try { + [self.webView removeObserver:self forKeyPath:@"estimatedProgress"]; + } @catch (NSException *exception) { + NSLog(@"removeObserver estimatedProgress exception: %@", exception); + } + } + + // 顺便把 JS 通道也移除,避免潜在的循环引用 + [self.webView.configuration.userContentController removeScriptMessageHandlerForName:@"keyBoard"]; +} + +@end