sách gpt4 ai đã đi

Tóm tắt các vấn đề về WKWebView của iOS11

In lại Tác giả:qq735679552 Thời gian cập nhật: 2022-09-27 22:32:09 31 4
mua khóa gpt4 Nike

CFSDN nhấn mạnh vào việc tạo ra giá trị thông qua mã nguồn mở. Chúng tôi cam kết xây dựng một nền tảng chia sẻ tài nguyên để mọi người làm CNTT có thể tìm thấy thế giới tuyệt vời của riêng mình tại đây.

Bài đăng trên blog CFSDN iOS11 WKWebView Problem Summary này được tác giả thu thập và sắp xếp. Nếu bạn quan tâm đến bài viết này, hãy nhớ thích nó.

Bài toán 1 Mô tả

Không có vấn đề gì khi tải URL bằng WKWebView trong iOS9 và iOS10, nhưng lại trống trong iOS11. Có thể là do NSMutableURLRequest. iOS11 có vẻ như không hỗ trợ NSMutableURLRequest, cho dù đó là UIWebView hay WKWebView.

Giải pháp tham khảo.

?
1
2
3
4
5
6
7
8
9
nếu như #có sẵn(iOS 11, *) {
  hãy yêu cầu = NSURLRequest.init(url: URL.init(string: urlStr)!)
  self.wkWebView.load(yêu cầu như URLRequest)
} khác {
  hãy yêu cầu = NSMutableURLRequest.init(url: URL.init(string: urlStr)!, cachePolicy: NSURLRequest.CachePolicy.reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 60)
  yêu cầu.httpPhương pháp = "LẤY"
  yêu cầu.httpBody = ( "mã thông báo=" + tokenValue()).dữ liệu( sử dụng : Chuỗi.Encoding.utf8)
  self.wkWebView.load(yêu cầu như URLRequest)
}

Mô tả về Sự cố 2: Khi tôi sử dụng trình mô phỏng iPhone X để vào dự án Hybrid, tôi thấy rằng nó bị sập ngay khi tôi vào và thông tin về sự cố rất nhỏ:

libc++abi.dylib: kết thúc với ngoại lệ chưa được phát hiện có kiểu NSException.

Điều này chắc chắn sẽ không giúp bạn xác định được lỗi, nhưng điểm dừng toàn cục vẫn cung cấp cho bạn một số thông tin:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hai mươi mốt
hai mươi hai
hai mươi ba
hai mươi bốn
25
- ( vô hiệu )webView:(WKWebView *)webView quyết địnhPolicyForNavigationAction:(WKNavigationAction *)navigationAction trình xử lý quyết định:( vô hiệu (^)(WKNavigationActionPolicy))trình xử lý quyết định {
  NSString *requestString = navigationAction.request.URL.absoluteString;
  //Xử lý đặc biệt cho các liên kết ngoài, quay số và chuyển hướng đến appstore
  UIApplication *ứng dụng = [UIApplication sharedApplication];
  NSURL *url = [URL yêu cầu hành động điều hướng];
  //Điện thoại
  //Một số mã kinh doanh bị bỏ qua ở đây
  nếu như ([url.absoluteString chứaString:@ "itunes.apple.com" ])
  {
   nếu như ([ứng dụng có thểMởURL:url])
   {
    [ứng dụng mởURL:url];
    decisionHandler(WKNavigationActionPolicyCancel);
   }
  }
  nếu như ([requestString có Tiền tố:@ "easy-js:" ]) {
   [self handleRequestString:requestString webView:(EasyJSWebView *)webView.superview];
   decisionHandler(WKNavigationActionPolicyCancel);
  }
  nếu như ([self.realDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)])
  {
   [self.realDelegate webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler];
  }
  trình xử lý quyết định(WKNavigationActionPolicyAllow); // Thu gọn ở đây
}

Bạn vẫn không biết tại sao nó lại bị sập ở đây? Trước đây thì ổn mà, đúng không? ?

Mẹo: Để có được một số thông tin về ngăn xếp giúp xác định vấn đề nhanh chóng và chính xác, bạn có thể thực hiện như sau trong hàm chính:

?
1
2
3
4
5
6
7
8
9
10
11
12
số nguyên chủ yếu( số nguyên đối số, char * đối số[]) {
  @ thử {
   @autoreleasepool
   {
    trở lại UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate lớp học ]));
   }
  }
  @ nắm lấy (Ngoại lệ NSException*)
  {
   Nhật ký gỡ lỗi(@ "Ngoại lệ=%@\nDấu vết ngăn xếp:%@" , ngoại lệ, [ngoại lệ callStackSymbols]);
  }
}

Cuối cùng cũng tìm ra lỗi chính:

?
1
Trình xử lý hoàn thành được chuyển đến -[WKPrivateNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:] đã được gọi nhiều lần

Điều này có nghĩa là phương thức proxy WKWebView đã được gọi nhiều lần.

?
1
2
3
4
5
6
7
8
9
nếu như ([requestString có Tiền tố:@ "easy-js:" ]) {
   [self handleRequestString:requestString webView:(EasyJSWebView *)webView.superview];
   decisionHandler(WKNavigationActionPolicyCancel);
  }
  nếu như ([self.realDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)])
  {
   [self.realDelegate webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler];
  }
  trình xử lý quyết định(WKNavigationActionPolicyAllow); // Thu gọn ở đây

Chúng ta hãy cùng phân tích ngắn gọn lý do tại sao lại bị gọi nhiều lần:

1. Hệ thống xác định xem phương thức này có được thực thi nhiều lần hay không, chủ yếu bằng cách xem decisionHandler() có được thực thi nhiều lần hay không; 2. Vì decisionHandler() sẽ được thực thi trong phán đoán if, dòng mã cuối cùng cũng sẽ thực thi decisionHandler() và decisionHandler() cũng sẽ được thực thi trong self.realDelegate, điều đó có nghĩa là trình xử lý decisionHandler() có thể được thực thi nhiều lần. Giải pháp cho vấn đề này là sửa đổi mã để đảm bảo WKWebView chỉ gọi phương thức proxy này một lần cho một LoadRequest duy nhất.

Sửa đổi như sau:

?
1
2
3
4
5
6
7
8
9
10
nếu như ([requestString có Tiền tố:@ "easy-js:" ]) {
  [self handleRequestString:requestString webView:(EasyJSWebView *)webView.superview];
  decisionHandler(WKNavigationActionPolicyCancel);
}
khác nếu như ([self.realDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)])
{
  [self.realDelegate webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler];
} khác {
  trình xử lý quyết định(WKNavigationActionPolicyAllow);
}

Điều này đảm bảo rằng decisionHandler() chỉ được thực thi một lần cho một LoadRequest duy nhất.

Mô tả sự cố 3: iOS11 WKWebview lấy được chiều cao không chính xác.

Khi gặp phải vấn đề này, tôi thấy độ lệch khoảng 64 pixel, điều này làm tôi nhớ đến tableView và collectionView. Vì vậy, giải pháp như sau:

?
1
2
3
4
5
nếu như (@available(iOS 11.0, *)) {
   _webView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
   _webView.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
   _webView.scrollView.scrollIndicatorInsets = _webView.scrollView.contentInset;
  }

Liên kết gốc: http://www.jianshu.com/p/9efa333820f9.

Cuối cùng, bài viết này về tóm tắt các vấn đề của iOS11 WKWebView kết thúc tại đây. Nếu bạn muốn biết thêm về tóm tắt các vấn đề của iOS11 WKWebView, vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

31 4 0
qq735679552
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com