Cocoa 启动时打开url

Cocoa 启动时打开url,cocoa,notifications,launch,Cocoa,Notifications,Launch,我必须在cocoa应用程序的委托中实现什么方法,以便在启动时打开url?(本例中为http/https)我已经实现了url方案,我只需要知道如何在url通知中打开我的应用程序 更新:对不起,我不是很清楚。我的应用程序是一个支持https/http URL的浏览器,但只能在已经运行时打开它们。启动时如何在我的应用程序中实现对开放URL的支持?当应用程序在OS X上完成启动时,NSApp(程序的全局NSApplication实例)向其委托人发送消息(通过通知系统)。您可以在代理中实现该方法来处理通知

我必须在cocoa应用程序的委托中实现什么方法,以便在启动时打开url?(本例中为http/https)我已经实现了url方案,我只需要知道如何在url通知中打开我的应用程序


更新:对不起,我不是很清楚。我的应用程序是一个支持https/http URL的浏览器,但只能在已经运行时打开它们。启动时如何在我的应用程序中实现对开放URL的支持?

当应用程序在OS X上完成启动时,
NSApp
(程序的全局
NSApplication
实例)向其委托人发送消息(通过通知系统)。您可以在代理中实现该方法来处理通知,并使用打开浏览器窗口作为响应。类似于以下内容的操作将起作用:

// Your NSApp delegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://www.example.com/"]];
}

它不是委托方法。您需要为getURL事件实现一个Apple事件处理程序


幸运的是,这正是苹果使用的情况。

我已经实现了getURL事件,因此单靠这一点还不足以让应用程序在启动时打开url。诀窍是AppleEvent必须安装在applicationWillFinishLaunching:而不是ApplicationIDFinishLaunching:中。否则,事件根本不会发送,因为应用程序没有及时注册它。

要实现一个协议处理程序,您可以选择(例如,在Safari首选项中)作为“默认浏览器”,并响应HTTP/HTTPS启动,您需要做几件事

  • 将.scriptSuite和.scriptTerminology文件添加到项目资源中。这些将告诉MacOSX您将处理GetURL命令

  • 将CbundleUrlTypes密钥添加到您的Info.plist文件中,该文件列出了您的应用程序将处理的“URL方案”

  • 同样在Info.plist中,添加值为YES的NSAppleScriptEnabled键

  • 将新类作为NSScriptCommand的子类添加到应用程序中,并实现-(id)performDefaultImplementation选择器。在此函数中,您可以在[self-directParameter]中找到单击的URL。将此消息传递给应用程序的URL处理程序

  • 有关详细信息,请查看文章:

    这一点我已经知道了,但谢谢!我的意思是,我可以实现什么方法来允许我的应用程序自己打开URL?我的应用程序在运行时已经可以处理打开的url,但只有在其他地方单击url时才会启动。