禁用UIWebView中的链接?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了禁用UIWebView中的链接?相关的知识,希望对你有一定的参考价值。
我正在将一些内容从网络加载到UIWebView
,但我希望在UIWebView
中禁用所有链接。这可能吗?我可以解析文本,但我正在寻找更容易的东西。
您可以给UIWebView
一个delegate并将-webView:shouldStartLoadWithRequest:navigationType:
委托方法实现到return NO;
(初始加载除外)。
这将阻止用户查看除该单页之外的任何内容。
提供评论中要求的示例...从allowLoad=YES
开始,然后:
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
return allowLoad;
}
- (void)webViewDidFinishLoad:(UIWebView*)webView {
allowLoad = NO;
}
在Swift 4.0中测试:这种方法不需要额外的变量来测试这是否是初始加载。只需检查请求的类型(在本例中为LinkClicked),并在这种情况下返回false。否则只需返回true!
(当然要确保你设置webView.delegate
)
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
if navigationType == .linkClicked {
return false
}
return true
}
您可以从Webview禁用数据检测。
[webView setDataDetectorTypes:UIDataDetectorTypeNone];
对于swift 3:
尝试从webView.dataDetectorTypes
中删除您不希望显示为链接的类型
webView.dataDetectorTypes.remove(UIDataDetectorTypes.all)
简单的答案适用于Swift 2.0:
yourWebView.dataDetectorTypes = UIDataDetectorTypes.None
只需在您定义和使用Web视图的视图控制器中实现它,它就能完美运行。
我有类似的需求,在某些情况下只使用webViewDidFinishLoad是不够的,所以我使用webViewDidStartLoad来涵盖所有情况:
func webViewDidStartLoad(webView: UIWebView) {
startedLoading = true
}
func webViewDidFinishLoad(webView: UIWebView) {
alreadyOpen = true
}
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
if startedLoading && alreadyOpen {
// do something
return false
}else if startedLoading && !alreadyOpen{
return false
}else if !startedLoading {
return true
}
return true
}
在某些情况下,当加载html时,但是某些资源(如图像和DOM内部的一些重要资源)并未触发didFinishLoad方法,用户可以在此“短”间隔内导航。
Swift 3.0的另一个答案: 只要给出零,不要检测yourWebView初始代码的任何类型链接
yourWebView.dataDetectorTypes = UIDataDetectorTypes(rawValue: 0)
以上是关于禁用UIWebView中的链接?的主要内容,如果未能解决你的问题,请参考以下文章
代码片段使用复杂的 JavaScript 在 UIWebView 中插入 HTML?