2010-01-04 26 views
2

我在UIWebView中顯示一些帶有鏈接的HTML。我希望鏈接在用戶確認鏈接應該打開後在Safari中打開。取消選擇webView時突出顯示的鏈接:shouldStartLoadWithRequest:navigationType:返回false

打開鏈接工作正常,但如果用戶取消,鏈接保持選中狀態並以藍色突出顯示。我如何取消選擇鏈接並擺脫突出顯示?

- (BOOL)webView:(UIWebView *)aWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
if (navigationType == UIWebViewNavigationTypeLinkClicked) { 
    self.url = request.URL; 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Open the Link in Safari" message:[request.URL absoluteString] delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK"]; 
    [alert show]; 
    [alert release]; 
     return false; 
    } 
    return true; 
} 

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 
if (buttonIndex == 1) { 
     [[UIApplication sharedApplication] openURL:url]; 
} 
// Insert magic deselection code here 
} 

更新:似乎[UIWebView的stringByEvaluatingJavaScriptFromString:]是的路要走。但究竟如何?我試過

for (var e in document.getElementsByTag("a")) {e.blur();} 

但無濟於事。

回答

2

我認爲這是底層WebKit代碼的症狀,以及MobileSafari模擬「鼠標」位置的方式。

你可以嘗試對這些元素的CSS設定成類似:

a.YourElementClassName:hover { text-decoration: none; } 

如果我的猜測是正確的,它的轉向藍色,越來越強調的原因是因爲Safari瀏覽器認爲現在的鼠標光標在那元件。使用正確的CSS選擇器組合應該解決它。 (可能需要添加:訪問和:visited:盤旋只是爲了確保。)

1

您必須使用UIWebView stringByEvaluatingJavaScriptFromString:與document.getElementById('yourlinksid')類似的設置狀態爲取消選擇。

如果文件不是太大,可以嘗試使用js選擇所有元素(使用xpath或css選擇器獲取函數),然後將其設置爲取消選擇,而不是嘗試查找特定的元素。我的頭頂沒有JS配方,但UIWebView JS界面是你必須這樣做的。