// // RDSControlWebVC.m // Temperature // // Created by Kevin on 2023/12/6. #import "RDSControlWebVC.h" //#import #import @interface RDSControlWebVC () @property (nonatomic, strong) WKWebView *webView; //@property (nonatomic, strong) WebViewJavascriptBridge *bridge; @end @implementation RDSControlWebVC - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; [self configSubviews]; // self.requestURL = @"http://192.168.1.4:8080/"; [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.requestURL]]]; [RDSHudShower showWithStatus:nil]; // [self loadExamplePage]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES]; [self.webView.configuration.userContentController addScriptMessageHandler:self name:@"closeH5"]; [self.webView.configuration.userContentController addScriptMessageHandler:self name:@"startGetToken"]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.navigationController setNavigationBarHidden:NO]; [self.webView.configuration.userContentController removeScriptMessageHandlerForName:@"closeH5"]; [self.webView.configuration.userContentController removeScriptMessageHandlerForName:@"startGetToken"]; } - (void)loadExamplePage { NSString* htmlPath = [[NSBundle mainBundle] pathForResource:@"ExampleAppH5" ofType:@"html"]; NSString* appHtml = [NSString stringWithContentsOfFile:htmlPath encoding:NSUTF8StringEncoding error:nil]; NSURL *baseURL = [NSURL fileURLWithPath:htmlPath]; [self.webView loadHTMLString:appHtml baseURL:baseURL]; } - (void)configSubviews { [self.view addSubview:self.webView]; [self.webView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(self.view); if (@available(iOS 11, *)) { make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop); } else { make.top.equalTo(self.mas_topLayoutGuide); } if (@available(iOS 11.0, *)) { make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom); } else { make.bottom.equalTo(self.view.mas_bottom); } //make.edges.mas_equalTo(UIEdgeInsetsZero); }]; } #pragma mark - WKScriptMessageHandler - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { NSLog(@"%@",NSStringFromSelector(_cmd)); NSLog(@"%@",message); NSLog(@"%@",message.body); NSLog(@"%@",message.name); if ([message.name isEqualToString:@"closeH5"]) { [self closeH5]; } if ([message.name isEqualToString:@"startGetToken"]) { [self startGetToken]; } } -(void)closeH5 { [self.navigationController popViewControllerAnimated:YES]; } -(void)startGetToken { NSString *jsStr = [NSString stringWithFormat:@"getToken('%@')",TheDataManager.token]; [self.webView evaluateJavaScript:jsStr completionHandler:^(id _Nullable result, NSError * _Nullable error) { NSLog(@"---getToken---%@---%@",result, error); }]; } - (WKWebView *)webView { if (!_webView) { WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; config.userContentController = [[WKUserContentController alloc] init]; config.allowsInlineMediaPlayback = YES; _webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:config]; _webView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; if (@available(iOS 11.0, *)) { _webView.configuration.preferences.javaScriptEnabled = YES; _webView.configuration.preferences.javaScriptCanOpenWindowsAutomatically = YES; _webView.configuration.preferences.minimumFontSize = 10; _webView.configuration.preferences.javaScriptEnabled = YES; _webView.configuration.preferences.javaScriptCanOpenWindowsAutomatically = YES; _webView.configuration.preferences.minimumFontSize = 10; } if (@available(iOS 16.4, *)) { _webView.inspectable = YES; } else { // Fallback on earlier versions } _webView.UIDelegate = self; _webView.navigationDelegate = self; // [self jsBridge]; } return _webView; } //- (void)jsBridge { // RDS_WEAKSELF(weakSelf) // [WebViewJavascriptBridge enableLogging]; // 开启日志输出,便于调试 // self.bridge = [WebViewJavascriptBridge bridgeForWebView:_webView]; // [self.bridge setWebViewDelegate:self]; // // // js 回调 // [self.bridge registerHandler:@"closeH5()" handler:^(id data, WVJBResponseCallback responseCallback) { // [weakSelf.navigationController popViewControllerAnimated:YES]; // }]; // // [self.webView.configuration.userContentController addScriptMessageHandler:self name:@"closeH5"]; //} - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { [RDSHudShower dismissHUD]; [self startGetToken]; } - (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error { [RDSHudShower dismissHUD]; } @end