123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- //
- // RDSControlWebVC.m
- // Temperature
- //
- // Created by Kevin on 2023/12/6.
- #import "RDSControlWebVC.h"
- //#import <WebViewJavascriptBridge/WebViewJavascriptBridge.h>
- #import <WebKit/WebKit.h>
- @interface RDSControlWebVC () <WKUIDelegate, WKNavigationDelegate,WKScriptMessageHandler>
- @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
|