2012-06-12 23 views
28

Tôi có một biểu mẫu HTML có các trường nhất định mà tôi đang mở trong một UIWebview. Khi nhấp vào một nút cụ thể, tôi muốn thực hiện hành động trong ứng dụng.cách chặn nút bấm bên trong UIWebview trên iOS?

Cách tiếp cận hiện tại tôi đang sử dụng là nhấp vào nút tôi chuyển hướng trang đến URL giả. Tôi ngửi URL bằng phương thức ủy nhiệm "shouldStartLoadWithRequest" và dừng chuyển hướng. Sau đó tôi làm sự kiện tùy chỉnh của mình (chụp ảnh và tải lên) và sau đó tiếp tục. Điều này có vẻ là một hack xấu xí. Dù sao tôi có thể trực tiếp móc vào sự kiện bấm nút chứ không phải là một chuyển hướng trang?

CẬP NHẬT Dường như không có cách nào để thiết lập phương thức ủy nhiệm kích hoạt khi chức năng JS được gọi khi nhấn nút. Cách duy nhất để làm điều này là sử dụng phương pháp đánh hơi URL được đề cập ở trên. Điều này đã được giải thích chi tiết bởi joern dưới đây, vì vậy tôi sẽ chấp nhận câu trả lời của mình.

Trả lời

55

Bạn có thể làm như sau:

Trong HTML của bạn

<a class="yourButton" href="inapp://capture">Button Text</a> 

Trong UIWebViewDelegate bạn

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    if ([request.URL.scheme isEqualToString:@"inapp"]) { 
     if ([request.URL.host isEqualToString:@"capture"]) { 
     // do capture action 
     } 
     return NO; 
    } 
    return YES; 
} 

tôi thêm "chụp" tới URL của nút bấm của bạn để bạn có thể phân biệt giữa một số các nút sẽ kích hoạt các hành động khác nhau (nếu bạn muốn):

+1

Vâng, đây là phương pháp tôi đang sử dụng. Có cách nào để thêm hành động vào Nút qua mã không? Điều này có thể không thực hiện được do hộp cát tôi giả sử, nhưng chỉ muốn đảm bảo. –

+1

Bạn có thể làm rõ ý bạn muốn nói về "hành động" không? – joern

+0

Tôi có nghĩa là làm thế nào để thêm một chức năng (phương pháp) vào nút bấm để gọi lại của nút bấm đi đến chức năng này. Có thể không? hoặc là chặn URL cách duy nhất để làm điều này? –

3

Mã này:

<a class="yourButton" href="inapp://capture">Restart</a> 

không hoạt động đối với tôi.

Tôi đã thêm "inapp: // chụp" trong mã javascript của tôi cho chức năng sự kiện

KeyboardInputManager.prototype.restart = function (event) { 
    window.location.href = "inapp://capture"; 
    //other code 
}; 

Ngoài ra tôi sử dụng UIWebViewDelegate và Nó hoạt động dành cho iOS 8, 9.

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