JavaScript和Objective-c(IOS)之间的通信
Communication between javascript and Objective-c (IOS)
我知道在iOS和javascript之间进行通信的方法是在JS中创建假URL,并在Objective-C代码中附加一个字符串,该字符串将用作参数,并在此委托方法中解析该URL:
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
然后,通过使用参数 callID 再次调用本机方法stringByEvaluatingJavaScriptFromString
来发送返回值。
但我想,就像Android一样,直接从JS调用Objective-C方法并获取返回值。而不是需要在JavaSCript中编写任何方法来获取返回值。实际上我们已经有了JS代码。它在与安卓通信时完美运行。
有什么技巧可以解决我的问题,这些技巧将在AppStore上获得批准吗?
没有内置的方法可以执行此操作,但是您可以使用WebViewJavascriptBridge:https://github.com/marcuswestin/WebViewJavascriptBridge 等库。
即使有内置解决方案,也没有标准。因此,无论哪种方式,它的工作方式都与在Android上的工作方式不同。与 Obj-C 代码通信意味着您将远离浏览器,转向特定于平台的实现,这些实现本质上因平台而异。
您可以使用简单的步骤从目标 C 调用 JavaScript 方法。
请通过这个另请参阅 Apple 文档
如果我正确理解了您的问题,您想从Java脚本调用Objective-c方法,那么以下是我从Apple文档中引用的示例:-
让我们看一个示例类。在这种情况下,我们将创建一个 Objective-C 地址簿类并将其公开给 JavaScript。让我们从类定义开始:
@interface BasicAddressBook: NSObject {
}
+ (BasicAddressBook *)addressBook;
- (NSString *)nameAtIndex:(int)index;
@end
现在我们将编写代码以将 BasicAddressBook 实例发布到 JavaScript:
BasicAddressBook *littleBlackBook = [BasicAddressBook addressBook];
id win = [webView windowScriptObject];
[win setValue:littleBlackBook forKey:@"AddressBook"];
一旦将这些方法公开给 JavaScript(在本节末尾描述),您应该能够从 JavaScript 环境访问您的基本地址簿,并使用标准 JavaScript 函数对其执行操作。
现在,让我们做一个示例来展示如何在 JavaScript 中使用 BasicAddressBook 类实例。在这种情况下,我们将在地址簿中的某个索引处打印一个人的姓名:
function printNameAtIndex(index) {
var myaddressbook = window.AddressBook;
var name = myaddressbook.nameAtIndex_(index);
document.write(name);
}
- firefox插件和dev/panel之间的通信
- 如何在两个不同的iframe HTML之间进行通信
- Angularjs事件与发布/订阅指令之间的通信
- Firefox插件SDK:在侧边栏和主脚本之间通信对象
- Ember.js:接受的子组件和父组件之间通信的最佳实践
- 如何在Windows Phone 8.1应用程序中在C#和Javascript之间传递数据或通信
- 如何在Famo.us中的两个视图(不同的js文件)之间进行通信
- 在Jquery或Javascript中获取两个范围或日期之间的通信周数
- 如何在同源选项卡之间建立通信
- 如何在 PHP 和 JS 中的并发会话之间进行通信
- 如何在两个动画画布元素之间进行通信
- 在 HTML5 和 C# Web 套接字通信之间
- angularjs 中控制器和指令之间的通信
- 歌剧扩展脚本和它们之间的通信
- 如何使用js在两个aspx页面之间进行通信
- 多个应用程序之间的通信
- Socket.IO:如何在同一服务器中的Socket.on()事件之间通信/交换数据
- chrome扩展的浏览器操作、后台脚本和内容脚本之间通信的上下文和方法
- 使用PhoneGap/Cordova时应用程序和服务器之间通信的最佳实践
- 使用AJAX在两个JavaScript文件之间通信并发送数据