您正在寻找的是参考文档“Calling Objective-C Methods From Javascript”(参考)
基本上,总而言之,您必须将您的 Objective-C 类显式地暴露给 javascript 脚本环境。非正式协议是您想要实现的WebScripting
协议,以使您的自定义对象能够做到这一点。
一旦您想要向 javascript 公开的对象(例如您的“通知对象”)实现+ (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 {
// Create the Obj-C object you want JS to be able to access
CustomNotificationCenter *noteCenter = [CustomNotificationCenter sharedNotificationCenter];
// Get the script object that corresponds to "window" in JS
id win = [sender windowScriptObject];
// Add our noteCenter as a property of "window" called "customNotifications"
[win setValue:noteCenter forKey:@"customNotifications"];
}
如果你做的一切都正确,你应该能够在 Javascript 中使用你的 Objective-C 对象。例如,如果您为您的 公开了一个名为“printNotification:”的方法noteCenter
,那么在 Javascript 中这应该可以工作:
function messageReceived(messageText) {
window.customNotifications.printNotification_("Notification!" + messageText);
}
当然,您将使用 Growl 在您的自定义 Obj-C 对象中显示通知以及printNotification
. (如果您在 Mountain Lion 上,新的通知中心也很棒)。希望有帮助。