你需要查找的是“从Javascript调用Objective-C方法”参考文档(
参考)。简而言之,你必须显式地将你的Objective-C类暴露给javascript脚本环境。你需要实现
WebScripting
非正式协议,以便你的自定义对象能够被公开并可供使用。
一旦你想要暴露的对象(例如,“Notification object”)实现了
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector;
和
+ (BOOL)isKeyExcludedFromWebScript:(const char *)name;
,你的webview的控制器/代理应该会使该对象可用于javascript。
例如,在你的webView实例的
Frame Load Delegate中:
- (void)webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)windowObject forFrame:(WebFrame *)frame {
CustomNotificationCenter *noteCenter = [CustomNotificationCenter sharedNotificationCenter];
id win = [sender windowScriptObject];
[win setValue:noteCenter forKey:@"customNotifications"];
}
如果您已经正确完成了所有步骤,那么您应该能够在Javascript中使用您的Objective-C对象。例如,如果您为noteCenter
公开了一个名为“printNotification:”的方法,在Javascript中应该可以这样使用:
function messageReceived(messageText) {
window.customNotifications.printNotification_("Notification!" + messageText);
}
当然,您可以使用Growl在您的自定义Obj-C对象中显示通知,并实现printNotification
。(如果您使用的是Mountain Lion,则新的通知中心也非常棒)。希望这能有所帮助。