웹보기에서 상호 작용을 사용 중지하는 방법이 있습니까? 사용자가로드 된 webview 이상으로 이동할 수 없으므로?WKWebview : 상호 작용을 사용 중지하고 링크를 클릭 함
편집 : UserInteractions를 사용하지 않도록 설정하는 것은 해결책이 아닙니다. 웹 사이트도 스크롤 할 수 있어야하기 때문입니다.
웹보기에서 상호 작용을 사용 중지하는 방법이 있습니까? 사용자가로드 된 webview 이상으로 이동할 수 없으므로?WKWebview : 상호 작용을 사용 중지하고 링크를 클릭 함
편집 : UserInteractions를 사용하지 않도록 설정하는 것은 해결책이 아닙니다. 웹 사이트도 스크롤 할 수 있어야하기 때문입니다.
는 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);
}
}
여기의 문제는 google.com과 같은 URL이있는 경우입니다. google.com/"something "을 열면 안됩니다. containsString과 함께 작동하지 않지만 스크롤 때문에 사용자 정의 할 수없는 userInteractions는 없습니다. – Secondwave
이 경우 isEqualToString 또는 다른 비교를 사용할 수 있습니다. –
다음과 같이 할 수 있습니다.
@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
}
이러한 자바 스크립트 라인은 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)'; }")
}
웹보기의 대리자 메서드를 구현할 수 있습니다. –
[UIWebView의 사용자 상호 작용 제한] 가능한 복제본 (http://stackoverflow.com/questions/452961/restricting-user-interaction-in-uiwebview) –