2011-10-17 108 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

不幸的是它不工作。所有的鏈接仍然是可點擊的。 –