2011-10-17 59 views
0

我有一个UIWebView正在编程创建如下;使用Javascript删除UIWebView中的链接?

- (void)loadView { 
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; 
webNews.dataDetectorTypes = UIDataDetectorTypeNone; 
[self.view addSubview: webNews]; 
[webNews loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://..........MYURL......./"]]]; 

}

我还具有以下委托方法;

我试图删除UIWebView中的所有链接,所以我的用户无法离开我已经编码的URL。我尝试过以下内容来更改链接的颜色;

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
[webNews stringByEvaluatingJavaScriptFromString:@"document.styleSheets[0].addRule(\"a.link\", \"color:#FFFFFF\")"]; 
} 

我读过使用javascript从UIWebView中删除所有链接的人的例子,但我似乎无法得到这个工作。任何人都可以在我需要做的事情的方法中提供一个例子吗?

回答

1

您确定用户从您正在加载的页面导航的唯一方法是触摸A元素吗?那么设置window.location的表单提交按钮或JavaScript事件处理程序如何?

据我所知,以防止导航防弹的方法就是推行webView: shouldStartLoadWithRequest: navigationType返回NO除了在第一个请求:

@interface MyDelegate <UIWebViewDelegate> 
{ 
    BOOL didStartFirstRequest; 
} 
@end 

@implementation MyDelegate 
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    if (didStartFirstRequest) 
     return NO; 
    didStartFirstRequest = YES; 
    return YES; 
} 
@end 
+0

我以前曾尝试实施该方法。我注意到它禁止我的webview完全加载。然而,这些论点与你提到的不同。我今天晚上会尝试。谢谢您的帮助。 –

+0

您在上面提供的建议具有预期的效果。感谢您的帮助。 –

1

你在这里做的是使所有与“链接”类的链接看起来像普通文本,而不是让它们无法点击。您可以使链接无效,下面的代码:

Array.prototype.forEach.call(document.querySelectorAll('a:link'), function(link) {link.href="javascript://"}); 

当然,他们仍然看起来可点击。你实际上可以用更像这样的东西去除它们:

Array.prototype.forEach.call(document.querySelectorAll('a:link'), function(link) { 
    while(link.firstChild && link.parentElement) { 
     link.parentElement.insertBefore(link.firstChild, link); 
     link.parentElement.removeChild(link); 
    } 
}); 

但是这会产生各种各样的其他副作用。这真的取决于你想要实现什么。

UPDATEparentNode切换到parentElement并添加了检查以跳过无父级链接。

+0

我在UIWebView中显示公司最近的新闻页面,所有的我想要显示的信息在页面上。我希望用户能够滚动网页视图,这就是全部。我希望页面上的/ all /链接不做任何事情。 –

+0

在这种情况下,我的第二种方法应该效果最好。它会简单地删除链接并将其替换为内容。 –

+0

不幸的是它不工作。所有的链接仍然是可点击的。 –