是否使用Javascript删除UIWebView中的链接?

是否使用Javascript删除UIWebView中的链接?,javascript,iphone,objective-c,xcode,uiwebview,Javascript,Iphone,Objective C,Xcode,Uiwebview,我有一个UIWebView,它是按如下程序创建的 - (void)loadView { UIView *webNewsView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; self.view = webNewsView; CGRect webFrame = [[UIScreen mainScreen] applicationFrame]; webFrame.origin.y = 0

我有一个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中删除所有链接的例子,但我似乎无法做到这一点。任何人都可以在我需要做的事情的方法中提供一个例子吗?

您在这里所做的是使“link”类的所有链接看起来像普通文本,而不是使它们不可读取。您可以使用以下代码使链接不起任何作用:

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);
    }
});
但这会有其他各种副作用。这真的取决于你想要实现什么


更新
parentNode
切换到
parentElement
,并添加了跳过无父链接的检查。

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

据我所知,防止导航的防弹方法是实现
webView:shouldstartdoadwithrequest: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
@接口MyDelegate
{
布尔·迪德斯塔特菲斯特;
}
@结束
@实现MyDelegate
-(BOOL)webView:(UIWebView*)webView应加载WithRequest:(NSURLRequest*)请求导航类型:(UIWebViewNavigationType)导航类型
{
如果(didStartFirstRequest)
返回否;
didStartFirstRequest=是;
返回YES;
}
@结束

我正在UIWebView中显示最近的公司新闻页面,我想显示的所有信息都在该页面上。我希望用户能够滚动web视图,仅此而已。我希望页面上的/all/links不起任何作用。在这种情况下,我的第二种方法应该最有效。它只会删除链接并用内容替换。不幸的是,它不起作用。所有的链接仍然可以点击。我已经更新了代码,使其更加可靠。它在我尝试过的几页上都能成功运行,我以前也尝试过实现这种方法。我注意到它完全禁止加载我的webview。然而,这些论点与你提到的不同。今晚我试试看。谢谢你的帮助。你上面提供的建议达到了预期的效果。谢谢你的帮助。