2015-10-26 30 views
-1

我使用WKWebview加載URL。如何檢查鏈接是否與WKWebview斷開?

let webView = WKWebview() 
let request: NSMutableURLRequest = NSMutableURLRequest(URL: url!) 
webView.loadRequest(request) 

如何檢測webView應加載的鏈接是否被破壞?

+0

沒有你嘗試加密的網址,然後再提出請求,以避免破碎的字符,如空格和「#」..等? –

+0

@Manch如何做這個加密部分? – confile

+0

對不起,我的意思是編碼的網址,所以看看這個threa d http://stackoverflow.com/a/24552028/4194908 –

回答

1

您可以使用canOpenUrl方法:

UIApplication.sharedApplication().canOpenURL(url) 

它會做URL驗證,如果連接狀態是正常,則返回true。 打電話之前它主要使用:

UIApplication.sharedApplication().openURL(url) 

,以確保這個環節可以在Safari中打開,但它應該幫助你在這裏太。

確保鏈接以http://或https://開頭。

編輯:

它只會檢查鏈接是否是正確的網址。

如果你想看到的頁面是離線的,授權問題等,可以實現WKNavigationDelegate協議,並檢查了這種方法:

- webView:didFailNavigation:withError: 

這應該給你更多的信息。

使用它總是個好主意:str.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAl‌​lowedCharacterSet())! 它確保您不會傳遞URL中不允許的字符。

編輯2: 要檢測的狀態代碼,你可以嘗試實施:

- webView:decidePolicyForNavigationResponse:decisionHandler: 

導航響應是NSURLResponse實例,但 每當你做一個HTTP請求,NSURLResponse對象你回來居然是NSHTTPURLResponse類的一個實例,因此您應該將其轉換爲NSHTTPURLResponse。這應該會給你一個statusCode。 在方法的最後一行中,您應該調用處理函數,例如decisionHandler(WKNavigationResponsePolicyAllow)

+0

假設鏈接是一個正確的網址。目標頁面可能處於脫機狀態。我如何檢查? – confile

+0

@ confile請參閱編輯答案。 – Greg

+0

你會不會建議在調用之前對每個url進行編碼,就像在這裏建議的那樣:http://stackoverflow.com/questions/24551816/swift-encode-url/24552028#24552028 – confile

0

如果你想檢查URL字符串是正確的,有效的 - 只是創建NSURL對象,如果路徑中包含錯誤會轉換爲nil

let string = "http://google.com" 
let url = NSURL(string: string) 

let brokenString = "http:\\brokenurl.12" 
let brokenUrl = NSURL(string: brokenString) // nil - it's not valid! 
0

編號:Answer exists here

if let url = NSURL(string: yourUrlString) { 
    var canOpen = UIApplication.sharedApplication().canOpenURL(url) 
}