2014-10-13 21 views
11

Có cách nào để tải URL ĐẦY ĐỦ bằng WKWebView cho mọi yêu cầu hay không.WKWebXem URL đầy đủ

webView:didFinishNavigation: 

Chỉ hoạt động cho điều hướng chính của Khung và không cung cấp thông số yêu cầu url.

Làm thế nào để có được URL ĐẦY ĐỦ giống như trong UIWebViewDelegate của

webViewDidFinishLoad:webView 

nào được ấy gọi sau khi bất kỳ kết thúc tải và bạn có thể nhận được địa chỉ yêu cầu đầy đủ từ các tham số WebView. Thật tuyệt khi thuộc tính URL của WKWebView tiết kiệm công việc cần được thực hiện để trích xuất một URL cơ sở thân thiện với giao diện người dùng nhưng đó là một mất mát lớn mà chúng tôi không thể có được đầy đủ!

Tôi đã cố gắng sử dụng

WebView: decidePolicyForNavigationAction: decisionHandler:

Nhưng nó tạo ra kết quả khác nhau cho URULs so với những gì bất động sản theo yêu cầu của một UIWebView nắm giữ sau khi kết thúc tải của một trang

+0

Bạn không sử dụng 'WKNavigationDelegate' cho điều này bằng cách xem yêu cầu' webView's cho mỗi yêu cầu trong một cái gì đó như 'webView: didStartProvisionalNavigation:'? https://developer.apple.com/library/IOs/documentation/WebKit/Reference/WKNavigationDelegate_Ref/index.html#//apple_ref/occ/intfm/WKNavigationDelegate/webView:didStartProvisionalNavigation: – Popeye

+0

WKWebView không có thuộc tính "yêu cầu" như UIWebView. Hoặc có cách nào để nhận yêu cầu từ đối tượng WKNavigation không? –

+0

Vâng, hành động WKNavigationAction có một thuộc tính yêu cầu của loại NSURLRequest – leviathan

Trả lời

9

Thứ nhất, Tôi nghĩ bạn đang bối rối NSURLNSURLRequest. Thông tin đầu tiên có thể truy cập dễ dàng qua webView.URL và nó thực sự cung cấp cho bạn URL đầy đủ của bất kỳ nội dung nào đã được tải. Giả sử rằng bạn nói URL, nghĩa là NSURL.

Nếu đó không phải là ý của bạn, ví dụ nếu bạn muốn xem chuỗi chuyển hướng hoặc tiêu đề phản hồi, thì tôi sợ câu trả lời là bạn không thể nhận thông tin cụ thể qua WKWebView.

Bạn sẽ phải quay lại UIWebView nơi bạn có thể chặn yêu cầu tương đối dễ dàng và xem yêu cầu/phản hồi đầy đủ.

+0

Cảm ơn bạn rất nhiều Stefan cho ý chí của bạn để giúp đỡ, nhưng nghĩ rằng bạn đã không hiểu trường hợp của tôi hoặc lớp WKWebView. WebView.URL cung cấp cho bạn - Đây là URL sẽ được phản ánh trong giao diện người dùng. Đây là chuỗi URL thân thiện với giao diện người dùng không bao gồm đường dẫn, truy vấn, v.v. Theo ĐẦY ĐỦ, tôi không phải là URL bao gồm tất cả các phần của nó, tức là URL đến từ một yêu cầu được tạo tự động khi tương tác với trang web được tải trong chế độ xem web. Tôi tìm thấy một cách để có được điều này bằng cách sử dụng giao thức điều hướng đại biểu mới. WKWebView tốt hơn rất nhiều so với UIWebView và tôi khuyến khích bạn tìm hiểu sâu hơn về nó –

+0

Tôi vẫn không hiểu ý của bạn với URL * đầy đủ *. Tôi đang in 'webView.URL' làm bài kiểm tra và tôi thấy nó có tất cả các bit trong đó, đường dẫn, truy vấn, đoạn, v.v.Tôi tò mò bạn đang thiếu thông tin gì? –

+0

Cũng lưu ý rằng 'webView.URL' không liên quan gì đến giao diện người dùng. Đó là * không * một chuỗi thân thiện với giao diện người dùng, thay vào đó là một thể hiện ful 'NSURL' phản ánh trang hiện được tải trong' WKWebView'. –

6

Bạn có thể nhận URL cho trang web mới được yêu cầu bởi "navigationAction.request.URL" trong phương thức ủy quyền decisionPolicyForNavigationAction.

func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) { 
    if let urlStr = navigationAction.request.URL?.absoluteString{ 
     //urlStr is what you want, I guess. 
    } 
    decisionHandler(.Allow) 
} 
+1

cảm ơn bạn đã giúp tôi –

Các vấn đề liên quan