iOS 11 WKWebView 에서 콘 텐 츠 를 불 러 올 수 없 는 해결 방법
NSMutableURL Request 를 사 용 했 는 지 iOS 11 은 NSMutableURL Request 를 지원 하지 않 는 것 같 습 니 다.UIWebView 를 사용 하 든 WKWebView 를 사용 하 든 NSMutableURL Request 를 지원 하지 않 습 니 다.
해결 방법 참조
if #available(iOS 11, *) {
let request = NSURLRequest.init(url: URL.init(string: urlStr)!)
self.wkWebView.load(request as URLRequest)
}else{
let request = NSMutableURLRequest.init(url: URL.init(string: urlStr)!, cachePolicy: NSURLRequest.CachePolicy.reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 60)
request.httpMethod = "GET"
request.httpBody = ("token=" + tokenValue()).data(using: String.Encoding.utf8)
self.wkWebView.load(request as URLRequest)
}
iOS 11 Xcode 9 WKWebView 붕괴 문제 해결 방안정식 버 전의 iOS 11&Xcode 9 가 발표 되 었 습 니 다.버 전의 빈 시간 을 틈 타 적당 한 작업 을 완성 하 는 데 시간 이 좀 걸 립 니 다.
아이 폰 X 의 시 뮬 레이 터 로 하 이브 리드 프로젝트 에 들 어 갔 을 때 들 어가 자마자 붕괴 되 고 붕괴 정보 가 적은 불쌍 함 을 발견 했다.
libc++abi.dylib: terminating with uncaught exception of type NSException
이 물건 으로 는 bug 를 찾 을 수 없 을 것 입 니 다.그러나 전체 정지점 에서 약간의 정 보 를 주 었 습 니 다.
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
NSString *requestString = navigationAction.request.URL.absoluteString;
// 、 appstore
UIApplication *app = [UIApplication sharedApplication];
NSURL *url = [navigationAction.request URL];
//
//
if ([url.absoluteString containsString:@"itunes.apple.com"])
{
if ([app canOpenURL:url])
{
[app openURL:url];
decisionHandler(WKNavigationActionPolicyCancel);
}
}
if ([requestString hasPrefix:@"easy-js:"]) {
[self handleRequestString:requestString webView:(EasyJSWebView *)webView.superview];
decisionHandler(WKNavigationActionPolicyCancel);
}
if ([self.realDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)])
{
[self.realDelegate webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler];
}
decisionHandler(WKNavigationActionPolicyAllow);//
}
왜 여기 서 무 너 졌 는 지 아직도 모르겠다.그동안 괜 찮 았 는데?팁:
스 택 정 보 를 얻 기 위해 빠 르 고 정확 한 포 지 셔 닝 문 제 를 해결 하기 위해 main 함수 에서:
int main(int argc, char * argv[]) {
@try {
@autoreleasepool
{
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
@catch (NSException* exception)
{
NSDebugLog(@"Exception=%@
Stack Trace:%@", exception, [exception callStackSymbols]);
}
}
최종 적 으로 관건 적 인 오 류 를 얻 었 다.Completion handler passed to -[WKPrivateNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:] was called more than once
WK WebView 의 이 대리 방법 이 여러 차례 호출 되 었 다 는 뜻 이다.
if ([requestString hasPrefix:@"easy-js:"]) {
[self handleRequestString:requestString webView:(EasyJSWebView *)webView.superview];
decisionHandler(WKNavigationActionPolicyCancel);
}
if ([self.realDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)])
{
[self.realDelegate webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler];
}
decisionHandler(WKNavigationActionPolicyAllow);//
여러 번 호출 된 원인 을 간단하게 분석 합 니 다.1.시스템 은 이 방법 이 여러 번 실 행 된 것 을 판단 하 는데 주로 decisionHandler()가 여러 번 실 행 된 지 여 부 를 본다.
2.if 판단 에서 decisionHandler()를 실행 하기 때문에 마지막 줄 코드 도 decisionHandler()를 실행 하고 self.realDelegate 에서 decisionHandler()를 실행 하기 때문에 decisionHandler()라 는 handler 는 여러 번 실 행 될 수 있 습 니 다.
그 문 제 를 해결 하 는 방향 은 코드 수정 입 니 다.
다음 과 같이 수정:
if ([requestString hasPrefix:@"easy-js:"]) {
[self handleRequestString:requestString webView:(EasyJSWebView *)webView.superview];
decisionHandler(WKNavigationActionPolicyCancel);
}
else if ([self.realDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)])
{
[self.realDelegate webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler];
} else {
decisionHandler(WKNavigationActionPolicyAllow);
}
즉,단일 LoadRequest 에서 decision Handler()를 한 번 만 실행 할 수 있 도록 보장 합 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
iOS 11 WKWebView 에서 콘 텐 츠 를 불 러 올 수 없 는 해결 방법문제 설명:iOS 9 와 iOS 10 은 WKWebView 로 URL 을 불 러 오 는 데 문제 가 없습니다.iOS 11 은 공백 입 니 다. NSMutableURL Request 를 사 용 했 는 지 iOS 11 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.