RDSControlWebVC.m 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. //
  2. // RDSControlWebVC.m
  3. // Temperature
  4. //
  5. // Created by Kevin on 2023/12/6.
  6. #import "RDSControlWebVC.h"
  7. //#import <WebViewJavascriptBridge/WebViewJavascriptBridge.h>
  8. #import <WebKit/WebKit.h>
  9. @interface RDSControlWebVC () <WKUIDelegate, WKNavigationDelegate,WKScriptMessageHandler>
  10. @property (nonatomic, strong) WKWebView *webView;
  11. //@property (nonatomic, strong) WebViewJavascriptBridge *bridge;
  12. @end
  13. @implementation RDSControlWebVC
  14. - (void)viewDidLoad {
  15. [super viewDidLoad];
  16. self.view.backgroundColor = [UIColor whiteColor];
  17. [self configSubviews];
  18. // self.requestURL = @"http://192.168.1.4:8080/";
  19. [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.requestURL]]];
  20. [RDSHudShower showWithStatus:nil];
  21. // [self loadExamplePage];
  22. }
  23. - (void)viewWillAppear:(BOOL)animated {
  24. [super viewWillAppear:animated];
  25. [self.navigationController setNavigationBarHidden:YES];
  26. [self.webView.configuration.userContentController addScriptMessageHandler:self name:@"closeH5"];
  27. [self.webView.configuration.userContentController addScriptMessageHandler:self name:@"startGetToken"];
  28. }
  29. - (void)viewWillDisappear:(BOOL)animated {
  30. [super viewWillDisappear:animated];
  31. [self.navigationController setNavigationBarHidden:NO];
  32. [self.webView.configuration.userContentController removeScriptMessageHandlerForName:@"closeH5"];
  33. [self.webView.configuration.userContentController removeScriptMessageHandlerForName:@"startGetToken"];
  34. }
  35. - (void)loadExamplePage {
  36. NSString* htmlPath = [[NSBundle mainBundle] pathForResource:@"ExampleAppH5" ofType:@"html"];
  37. NSString* appHtml = [NSString stringWithContentsOfFile:htmlPath encoding:NSUTF8StringEncoding error:nil];
  38. NSURL *baseURL = [NSURL fileURLWithPath:htmlPath];
  39. [self.webView loadHTMLString:appHtml baseURL:baseURL];
  40. }
  41. - (void)configSubviews {
  42. [self.view addSubview:self.webView];
  43. [self.webView mas_makeConstraints:^(MASConstraintMaker *make) {
  44. make.left.right.equalTo(self.view);
  45. if (@available(iOS 11, *)) {
  46. make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop);
  47. } else {
  48. make.top.equalTo(self.mas_topLayoutGuide);
  49. }
  50. if (@available(iOS 11.0, *)) {
  51. make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom);
  52. } else {
  53. make.bottom.equalTo(self.view.mas_bottom);
  54. }
  55. //make.edges.mas_equalTo(UIEdgeInsetsZero);
  56. }];
  57. }
  58. #pragma mark - WKScriptMessageHandler
  59. - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
  60. NSLog(@"%@",NSStringFromSelector(_cmd));
  61. NSLog(@"%@",message);
  62. NSLog(@"%@",message.body);
  63. NSLog(@"%@",message.name);
  64. if ([message.name isEqualToString:@"closeH5"]) {
  65. [self closeH5];
  66. }
  67. if ([message.name isEqualToString:@"startGetToken"]) {
  68. [self startGetToken];
  69. }
  70. }
  71. -(void)closeH5
  72. {
  73. [self.navigationController popViewControllerAnimated:YES];
  74. }
  75. -(void)startGetToken
  76. {
  77. NSString *jsStr = [NSString stringWithFormat:@"getToken('%@')",TheDataManager.token];
  78. [self.webView evaluateJavaScript:jsStr completionHandler:^(id _Nullable result, NSError * _Nullable error) {
  79. NSLog(@"---getToken---%@---%@",result, error);
  80. }];
  81. }
  82. - (WKWebView *)webView {
  83. if (!_webView) {
  84. WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
  85. config.userContentController = [[WKUserContentController alloc] init];
  86. config.allowsInlineMediaPlayback = YES;
  87. _webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:config];
  88. _webView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
  89. if (@available(iOS 11.0, *)) {
  90. _webView.configuration.preferences.javaScriptEnabled = YES;
  91. _webView.configuration.preferences.javaScriptCanOpenWindowsAutomatically = YES;
  92. _webView.configuration.preferences.minimumFontSize = 10;
  93. _webView.configuration.preferences.javaScriptEnabled = YES;
  94. _webView.configuration.preferences.javaScriptCanOpenWindowsAutomatically = YES;
  95. _webView.configuration.preferences.minimumFontSize = 10;
  96. }
  97. if (@available(iOS 16.4, *)) {
  98. _webView.inspectable = YES;
  99. } else {
  100. // Fallback on earlier versions
  101. }
  102. _webView.UIDelegate = self;
  103. _webView.navigationDelegate = self;
  104. // [self jsBridge];
  105. }
  106. return _webView;
  107. }
  108. //- (void)jsBridge {
  109. // RDS_WEAKSELF(weakSelf)
  110. // [WebViewJavascriptBridge enableLogging]; // 开启日志输出,便于调试
  111. // self.bridge = [WebViewJavascriptBridge bridgeForWebView:_webView];
  112. // [self.bridge setWebViewDelegate:self];
  113. //
  114. // // js 回调
  115. // [self.bridge registerHandler:@"closeH5()" handler:^(id data, WVJBResponseCallback responseCallback) {
  116. // [weakSelf.navigationController popViewControllerAnimated:YES];
  117. // }];
  118. //
  119. // [self.webView.configuration.userContentController addScriptMessageHandler:self name:@"closeH5"];
  120. //}
  121. - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
  122. [RDSHudShower dismissHUD];
  123. [self startGetToken];
  124. }
  125. - (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error {
  126. [RDSHudShower dismissHUD];
  127. }
  128. @end