2017-04-12 623 views
1

有没有一种方法来禁用网页视图相互作用? 这样用户就不能比加载的webview更进一步了吗?WKWebview:禁用互动和点击的链接

编辑: 禁用UserInteractions不是一个解决方案,因为该网站仍然是滚动的。

+0

可以实现网页视图的委托方法。 –

+1

[限制在UIWebView的用户交互]的可能的复制(http://stackoverflow.com/questions/452961/restricting-user-interaction-in-uiwebview) –

回答

1

落实WKNavigationDelegate协议:

@interface ViewController() <WKNavigationDelegate> 

设置你的WKWebViewnavigationDelegate属性:

self.wkWebView.navigationDelegate = self; 

然后实施要限制网址的政策:

- (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即与它不应该打开google.com/"something“它不能与containsString一起工作,但由于滚动,我无法可撤销userInteractions。 – Secondwave

+0

在这种情况下,您可以使用isEqualToString或其他比较。 –

0

你可以做到这一点如下。

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

#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

这些javascript行将通过覆盖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)'; }") 
}