Có một vài thư viện, nhưng tôi đã không sử dụng bất kỳ thư viện nào trong số này trong các dự án lớn, vì vậy bạn có thể muốn thử chúng:
-
Tuy nhiên, tôi nghĩ đó là một cái gì đó đủ đơn giản để bạn có thể tự mình thử. Cá nhân tôi đã làm chính xác điều này khi tôi cần làm điều đó. Bạn cũng có thể tạo một thư viện đơn giản phù hợp với nhu cầu của mình.
1. Thực thi các phương thức JS từ Objective-C
Đây thực sự chỉ là một dòng mã.
NSString *returnvalue = [webView stringByEvaluatingJavaScriptFromString:@"your javascript code string here"];
Thông tin chi tiết về Tài liệu UIWebView chính thức .
2. Thực thi các phương thức Objective-C từ JS
Điều này không may là phức tạp hơn một chút, bởi vì không có cùng thuộc tính windowScriptObject (và lớp) tồn tại trên Mac OSX cho phép giao tiếp hoàn chỉnh giữa cả hai.
Tuy nhiên, bạn có thể dễ dàng gọi từ các URL tùy chỉnh của javascript, như:
window.location = yourscheme://callfunction/parameter1/parameter2?parameter3=value
Và chặn nó khỏi Objective-C bằng cách:
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *URL = [request URL];
if ([[URL scheme] isEqualToString:@"yourscheme"]) {
// parse the rest of the URL object and execute functions
}
}
Điều này không phải là sạch như nó phải được (hoặc bằng cách sử dụng windowScriptObject) nhưng nó hoạt động.
3. Nghe các sự kiện JS gốc từ Objective-C (ví dụ: sự kiện DOM sẵn sàng)
Từ phần giải thích trên, bạn thấy rằng muốn làm được điều đó thì bạn phải tạo một đoạn mã JavaScript nào đó, gắn nó vào sự kiện mà bạn muốn theo dõi và gọi chính xác window.location
cuộc gọi mới được chặn.
Một lần nữa, không phải là sạch như nó phải được, nhưng nó hoạt động.