2017-04-12 2 views
1

웹보기에서 상호 작용을 사용 중지하는 방법이 있습니까? 사용자가로드 된 webview 이상으로 이동할 수 없으므로?WKWebview : 상호 작용을 사용 중지하고 링크를 클릭 함

편집 : UserInteractions를 사용하지 않도록 설정하는 것은 해결책이 아닙니다. 웹 사이트도 스크롤 할 수 있어야하기 때문입니다.

+0

웹보기의 대리자 메서드를 구현할 수 있습니다. –

+1

[UIWebView의 사용자 상호 작용 제한] 가능한 복제본 (http://stackoverflow.com/questions/452961/restricting-user-interaction-in-uiwebview) –

답변

1

WKNavigationDelegate 프로토콜을 구현 :

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { 

    if ([navigationAction.request.URL.absoluteString containsString:@"somedomain.com/url/here"]) { 
     decisionHandler(WKNavigationActionPolicyAllow); 
    } 
    else { 
     decisionHandler(WKNavigationActionPolicyCancel); 
    } 
} 
+0

여기의 문제는 google.com과 같은 URL이있는 경우입니다. google.com/"something "을 열면 안됩니다. containsString과 함께 작동하지 않지만 스크롤 때문에 사용자 정의 할 수없는 userInteractions는 없습니다. – Secondwave

+0

이 경우 isEqualToString 또는 다른 비교를 사용할 수 있습니다. –

0

다음과 같이 할 수 있습니다.

@interface ViewController() <WKNavigationDelegate> 

WKWebView의 설정 navigationDelegate 특성 :

self.wkWebView.navigationDelegate = self; 

는 그런 제한 할 URL (들)에 대한 정책을 구현을

//----------------------------------------------------------------------- 

#pragma mark - UIWebView Methods 

//----------------------------------------------------------------------- 

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 



    return YES; 
} 

//---------------------------------------------------------------- 

- (void)webViewDidStartLoad:(UIWebView *)webView { 
//disable user interaction 
} 

//---------------------------------------------------------------- 

- (void)webViewDidFinishLoad:(UIWebView *)webView{ 
//enable user interaction 
} 

//---------------------------------------------------------------- 

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{ 
    //enable user interaction 
} 
0

이러한 자바 스크립트 라인은 HTML을 오버라이드하여 긴 누르기와 링크 터치를 비활성화합니다. 내장 된 youtube 비디오와 같은 프레임 기반의 기능은 여전히 ​​작동합니다.

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { 
    webView.evaluateJavaScript("document.documentElement.style.webkitUserSelect='none'") 
    webView.evaluateJavaScript("document.documentElement.style.webkitTouchCallout='none'") 
    webView.evaluateJavaScript("var elems = document.getElementsByTagName('a'); for (var i = 0; i < elems.length; i++) { elems[i]['href'] = 'javascript:(void)'; }") 
} 
관련 문제