2012-03-11 27 views
10

Vì vậy, tôi muốn phát hiện một lần nhấn trên UIWebView nếu nó không khai thác trên một liên kết. Làm thế nào để tôi làm điều này? Tôi biết rằng:cách phát hiện chạm trên UIWebView nếu đó không phải là liên kết

- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 

được gọi mỗi lần nhấp vào một liên kết. Tuy nhiên làm thế nào để tôi biết nếu đó là một vòi nước trên UIWebView đó là khác với liên kết? Tôi đã tìm kiếm trên web và gần nhất tôi tìm thấy là this. Tuy nhiên, điều đó không cho tôi biết liệu vòi nước có nằm trên một liên kết hay không

Trả lời

0

Tôi cảm thấy phương pháp sau đây sẽ hoạt động theo lý thuyết. Bạn có thể làm là bọc UIWebView trong hộp chứa UIView và đặt công cụ nhận dạng cử chỉ của bạn trên chế độ xem vùng chứa. Sau đó, các sự kiện chạm không được xử lý bởi UIWebView sẽ được chuyển qua phân cấp chế độ xem và bị chặn bởi chế độ xem vùng chứa của bạn.

Trong vùng chứa UIView thực hiện các trình xử lý thích hợp & bạn có thể phát hiện các vòi. Hy vọng điều này là rõ ràng ...

Nếu phương pháp này không mang trái cây, thì bạn có thể đi tuyến đường javascript. tức là đặt các sự kiện javascript dưới dạng trang web tải & bạn sẽ tốt. Xem tại đây để biết thêm - Does UIGestureRecognizer work on a UIWebView?

+2

vấn đề là cách nhấp vào liên kết vẫn còn gây nên các biểu tượng nhận dạng vòi cử chỉ – xonegirlz

+0

phần tồi tệ nhất là - (BOOL) gestureRecognizer: (UIGestureRecognizer *) gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer được gọi trước khi shouldStartLoadWithRequest được thực hiện – xonegirlz

+0

vâng đó sẽ xảy ra .trong 'gestureRecognizer' bạn sẽ phải tìm ra một số cách để bỏ qua cử chỉ. –

1

Hãy để tôi hướng dẫn bạn tại sao điều này là không thể.

- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 
  1. Thậm chí nếu nó có vẻ lố bịch sẽ có cuộc gọi đến phương pháp đại biểu này khi người dùng đã nhấp vào một liên kết với một loại chuyển hướng của UIWebViewNavigationTypeOther thay vì UIWebViewNavigationTypeLinkClicked. Điều này xảy ra với một số trang dựa trên javascript thường được tìm thấy trên internet.

  2. Ngay cả khi âm thanh hoàn toàn mất trí, sẽ có các cuộc gọi đến phương thức ủy nhiệm này với UIWebViewNavigationTypeLinkNhấp vào nhiều lần khi trên thực tế người dùng chưa nhấp vào liên kết. Một số trang web nhúng nội dung của khung/khung nội tuyến bằng cách sử dụng nhấp chuột được mô phỏng trên nút ẩn, gây ra nhiều cuộc gọi với UIWebViewNavigationTypeLinkClicked.

    Cách lạ này khi nhúng nội dung bằng nhấp chuột mô phỏng được thực hiện để bỏ qua cài đặt bảo mật của một số trình duyệt nhất định. Google đã bị kiện vì điều này một thời gian trước và phải trả vài triệu hình phạt, vì họ đã sử dụng thủ thuật này để đặt cookie trong trình duyệt Safari ngay cả khi người dùng đã định cấu hình trình duyệt không chấp nhận các cookie này.

Vì vậy, nếu bạn chỉ dựa vào phương thức ủy quyền của UIWebView, bạn sẽ nhận được nhấp chuột khi không có gì và không khi nào có nhấp chuột. Do đó, trong một môi trường không kiểm soát được thì điều này là không thể.

Nhưng chính xác thì bạn đang cố gắng làm gì?

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