Javascript向Mac cocoa应用程序中的objective-c发送消息

Javascript向Mac cocoa应用程序中的objective-c发送消息,javascript,objective-c,xcode,cocoa,webview,Javascript,Objective C,Xcode,Cocoa,Webview,我对objective-C相当陌生,所以请不要假设我知道一些东西,因为我可能不会:) 我有一个用于Mac(而不是iOS)的cocoa应用程序,带有webview。在webview中,有一个站点充当迷你消息传递客户端。当收到消息时,我希望javascript通知objective-c已收到消息。。。然后objective-c将运行一些代码,比如创建咆哮弹出窗口 我已经在Apple开发者网站上看过了,但是我不太确定如何正确地实现它。您要找的是参考文档“从Javascript调用Objective-C

我对objective-C相当陌生,所以请不要假设我知道一些东西,因为我可能不会:)

我有一个用于Mac(而不是iOS)的cocoa应用程序,带有webview。在webview中,有一个站点充当迷你消息传递客户端。当收到消息时,我希望javascript通知objective-c已收到消息。。。然后objective-c将运行一些代码,比如创建咆哮弹出窗口


我已经在Apple开发者网站上看过了,但是我不太确定如何正确地实现它。

您要找的是参考文档“从Javascript调用Objective-C方法”()

总之,您必须将Objective-C类显式地公开给javascript脚本环境。
WebScripting
非正式协议是您希望为自定义对象实现的一个协议,以使其能够实现这一点

一旦要向javascript公开的对象(例如,您的“通知对象”)实现了
+(BOOL)select或excludedfromWebScript:(SEL)一个选择器
+(BOOL)iskeydexcludedfromWebScript:(const char*)名称
webview的控制器/委托现在应该使对象可供javascript使用

例如,在webView实例的帧加载委托中:

- (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对象。例如,如果您在Javascript中为您的
noteCenter
公开了一个名为“printNotification:”的方法,那么它应该可以工作:

function messageReceived(messageText) {
     window.customNotifications.printNotification_("Notification!" + messageText);
}

当然,您可以使用Growl在自定义Obj-C对象中显示通知以及
printNotification
的实现。(如果你在山狮上,新的通知中心也很神奇)。希望能有所帮助。

谢谢!我对CustomNotificationCenter有一些问题,因为我不知道如何实现它。我把它添加到我的AppDelegate.h:-(void)webView:(webView)webView didClearWindowObject:(WebScriptObject*)windowObject for frame:(WebFrame*)frame;并将您的代码添加到AppDelegate.m中,但它给了我一个错误*使用未声明的标识符'note center'@SebastianRuiz Oh-“CustomNotificationCenter”是我为了示例代码而使用的示例(不存在)类。在您的例子中,您将创建自己的类,为它提供与Growl集成的功能以发送通知,然后将其公开给Javascript,就像我公开假装类“CustomNotificationCenter”一样。如果您需要帮助,请随时发布另一个问题!我在跑山狮;)因此,我应该能够使用内置的通知中心(或带有咆哮的嘶嘶声)。我不太清楚你说的该怎么办。特别是一体化。如果你能举个例子,我会很高兴的。非常感谢你的帮助@塞巴斯蒂安·鲁伊斯好的,当我有时间的时候,你能给我一两天时间吗?感谢网络应用在我的控制之下。谢谢你帮我,我欠你一个人情。