2010-05-20 30 views

Trả lời

30

Cập nhật - không sử dụng UIWebView nữa. Sử dụng WKWebView, hoặc tốt hơn (nếu nó phù hợp với nhu cầu của bạn và bạn đang xây dựng cho iOS 9), một trình điều khiển Safari View.

Nhưng nếu bạn phải sử dụng UIWebView, trong đoàn UIWebView bạn, cung cấp một thực hiện cho webView:shouldStartLoadWithRequest:navigationType:

Trong HTML của bạn hoặc các tập tin Javascript, thêm chức năng mà gửi URL đến một chương trình tùy chỉnh (cho mục đích dễ đọc, các isn chương trình tùy chỉnh không bắt buộc). Tất cả các URL được gửi sẽ được chuyển đến thực hiện phương pháp Objective-C của bạn và sau đó bạn có thể làm những gì bạn muốn.

+3

Có ví dụ về mã để minh họa điều này – nishantcm

+0

Có tùy chọn nào khác để đạt được điều này không? (ví dụ, với các phiên bản iOS mới hơn)? –

+1

@ lysergic-acid Tôi đã không thực sự sai lầm với WebViews trong một thời gian, nhưng tôi muốn tưởng tượng không vì đây thực sự là một giải pháp khá tốt đẹp. Trừ khi bạn bằng cách nào đó có thể buộc một khối để JS sự kiện (kiểm tra các tài liệu UIWebView). iOS 7 đã thêm JavaScriptCore nhưng tôi không chắc rằng nó sẽ hữu ích ở đây. – bpapa

30

Chỉ để minh họa cho giải pháp bằng cách "bpapa" với mã thực tế:

CẢNH BÁO: chưa được kiểm tra đang

Thực hiện phương pháp này trong đại biểu của UIWebView ...

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType { 
    if ([[[inRequest URL] scheme] isEqualToString:@"callback"]) { 

     // Do something interesting... 

     return NO; 
    } 

    return YES; 
} 

.. .then đặt liên kết trong webwieb như thế này:

<a href="callback:whatever">Click me</a> 

Và nó sẽ kích hoạt mã gọi lại của bạn. Rõ ràng, bạn có thể kích hoạt nó với một javascript thay vì một liên kết đơn giản.

+3

Tôi nghĩ rằng lược đồ không chứa dấu hai chấm. Nó sẽ chỉ là @ "gọi lại". Và để so sánh, tôi nghĩ bạn nên sử dụng '- (BOOL) isEqualToString: (NSString *) aString;' – mkko

+0

@mkko: sửa nó – geon

+0

+1 -it's work. Cảm ơn @geon –

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