【问题标题】:Removing hyper links from a URL shown in UIWebView从 UIWebView 中显示的 URL 中删除超链接
【发布时间】:2011-12-08 22:13:12
【问题描述】:

我正在制作一个包含最新公司新闻部分的应用程序。基本上,该计划最初是使用 ASIHTTPRequest 来提取所有 HTML,在其中搜索标签,然后将信息提取出来以获取新闻标题和描述,然后在我的应用程序的滚动视图中将其显示为计划文本。然而,这被证明是一场噩梦,因为该网站的信息显示方式没有模式。

我决定在 UIWebView 中显示 URL,它显示最新的公司新闻。我希望这是一个单页视图,因此我的用户无法导航到网站的其他方面。是否可以阻止网站超链接显示为链接?我的 UIWebView 代码如下;

UIView *webNewsView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
self.view = webNewsView;    

CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
webFrame.origin.y = 0.0f;
webNews = [[UIWebView alloc] initWithFrame:webFrame];
webNews.backgroundColor = [UIColor clearColor];
webNews.scalesPageToFit = YES;
webNews.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
webNews.delegate = self;
[self.view addSubview: webNews];
[webNews loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://myURLHere"]]];

indicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
indicator.frame = CGRectMake(0.0, 0.0, 25.0, 25.0);
indicator.center = self.view.center;
[self.view addSubview: indicator];

任何帮助将不胜感激。 谢谢

编辑:我也尝试添加以下内容;

webNews.dataDetectorTypes = UIDataDetectorTypeNone;

这对链接的检测没有影响。

【问题讨论】:

    标签: iphone objective-c ios4 uiwebview


    【解决方案1】:

    好的,为dataDetectorTypes设置UIDataDetectorTypeNone,应该会阻止webview检测链接,这是正确的。

    进一步使用

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

    UIWebview 委托,您可以简单地为您不希望用户允许关注的 URL 返回 NO...

    此外,您可以在页面加载完成后插入自定义 CSS 规则

    - (void)webViewDidFinishLoad:(UIWebView *)webView 
    

    委托方法,这样:

    [MywebView stringByEvaluatingJavaScriptFromString:@"document.styleSheets[0].addRule(\"a.link\", \"color:#FF0000\")"];
    

    所以基于我提到的线程中的 CSS,这应该可以工作:

    [MywebView stringByEvaluatingJavaScriptFromString:@"document.styleSheets[0].addRule(\".active\", \"pointer-events: none;\");document.styleSheets[0].addRule(\".active\", \"cursor: default;\")"];
    

    【讨论】:

    • 设置 UIDataDetectorTypeNone 奇怪地没有任何区别。所有的链接仍然是可点击的。即使通过界面生成器取消选中该框也没有任何区别。今晚我会尝试你的最后一条建议,谢谢。
    • 您当然可以使用 shouldStartLoadWithRequest 委托禁止链接可点击。至于禁止链接显示为链接,取决于我在上面示例中显示的方式使用正确的 CSS 规则。也许有更好的 CSS 方法,但我的 CSS 不是那么好
    • 我已经实现了 [webNews stringByEvaluatingJavaScriptFromString:@"document.styleSheets[0].addRule(\"a.link\", \"color:#FF0000\")"];在 - (void)webViewDidFinishLoad:(UIWebView *)webView 委托方法中,它没有区别。所有链接仍然可以点击
    • 我没有说它们不能点击!链接的颜色是否变为红色?如果是,则 CSS 规则有效。所以这意味着您需要简单地将链接设置为与文本的其余部分具有相同的颜色,并且不应该加下划线......此外,您应该能够取消我向您展示的网络委托的加载请求!
    • 至于正确的 CSS 看这个线程:stackoverflow.com/questions/2091168/disable-a-link-using-css : .active { pointer-events: none;光标:默认; }
    【解决方案2】:

    您还可以在此处进一步自定义 Web 视图中的链接的一件事是编辑您传递到 Web 视图中的 html 字符串。具体来说,您可以将 CSS 添加到 html 以确定链接的显示方式(颜色、下划线等)。这是一个代码 sn-p,它接受一个 html 字符串并使用 CSS 对其进行自定义:

    NSString *HTML = [NSString stringWithFormat:@"<html>\n"
                          "<head>\n"
                          "<style type=\"text/css\">\n"
                          "body {font-family: \"%@\"; font-size: %@; color:#%@; background-color:#FFFFFF; margin: 0; padding: 0; line-height: 1.5; }\n"
                          "a:link {color:#00B0EA; text-decoration: none;}\n"
                          "</style>\n"
                          "</head>\n"
                          "<body><script type=\"text/javascript\">window.onload = function() { window.location.href = \"ready://\" + document.body.offsetHeight; } </script>%@</body>\n"
                          "</html>",
                          font.familyName, @(font.pointSize), colorHexString, htmlBodyString];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 2011-12-09
      • 2016-09-01
      • 2012-03-06
      相关资源
      最近更新 更多