Có cách nào để gọi lại tới mục tiêu-c khi một sự kiện nào đó đã được phát hiện trong UIWebView không? Javascript có thể gửi một cuộc gọi lại đến Objective-C không?Javascript trong UIWebView gọi lại tới C/Objective-C
Trả lời
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.
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.
- 1. iOS UIWebView Javascript - chèn dữ liệu -nhận lại lời gọi?
- 2. giá trị trả lại javascript UIWebView
- 3. Calling javascript sử dụng UIWebView
- 4. Gọi lại một cuộc gọi lại bằng javascript
- 5. Phạm vi gọi lại JavaScript
- 6. Javascript Crashing UIWebview
- 7. Tạm dừng thực thi JavaScript trong UIWebView
- 8. javascript window.open từ gọi lại
- 9. Gọi hàm Javascript từ cuộc gọi lại C++ trong V8
- 10. lỗi Phát hiện JavaScript trong một UIWebView
- 11. Đóng UIWebView bằng javascript: window.close();
- 12. NSString trong UIWebview
- 13. UIWebView stringByEvaluatingJavaScriptFromString trong nền
- 14. Python ctypes chức năng gọi lại tới SWIG
- 15. Tạo chức năng gọi lại Javascript?
- 16. Tham gia nhiều cuộc gọi lại/chuỗi trong javascript?
- 17. cách chạy javascript trong khi đợi cuộc gọi lại ajax
- 18. Tham chiếu "này" từ trong một cuộc gọi lại javascript
- 19. Đặt biến cục bộ trong hàm gọi lại JavaScript
- 20. ios - UIWebView DidFinishLoad không được gọi là
- 21. Cho phép UIInterfaceOrientationLandscape trong khi phát lại video UIWebView
- 22. Tiêm CSS vào UIWebView bằng JavaScript
- 23. cấm gọi tới System.exit
- 24. Gửi ByteArray tới JavaScript
- 25. Làm cách nào để truyền một đối tượng C++ được bao bọc tới một cuộc gọi lại Javascript?
- 26. iOS loadHtmlString trong UIWebView không hoạt động với Javascript
- 27. Async gọi mẫu tới API trong Node.js
- 28. tải HTML lớn chuỗi thành UIWebView sử dụng javascript
- 29. Ghi đè Javascript xác thực() trong khi vẫn giữ lại gọi lại
- 30. gọi javascript trên chế độ xem hiển thị trong BackBone js. gọi lại sau khi trả lại?
Có ví dụ về mã để minh họa điều này – nishantcm
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)? –
@ 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