我必须在我的cocoa应用程序的委托中实现什么方法才能在启动时打开一个url? (http / https,在这种情况下)我已经实现了url方案,我只需要知道如何在url通知上打开我的应用程序。
更新:对不起,我不是很清楚。我的应用程序是一个支持https / http网址的浏览器,但只能在它已经运行时打开它们。如何在启动时在我的应用中实现对开放网址的支持?
答案 0 :(得分:8)
当应用程序在OS X上完成启动时,NSApp
(程序的全局NSApplication
实例)向其委托发送applicationDidFinishLaunching:
消息(通过通知系统)。您可以使用NSWorkspace
在委托中实现该方法来处理通知并打开响应中的浏览器窗口。以下内容可行:
// Your NSApp delegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://www.example.com/"]];
}
答案 1 :(得分:3)
我已经实现了getURL事件,因此单独使用该应用程序无法在启动时打开URL。诀窍是AppleEvent必须安装在applicationWillFinishLaunching中:不是applicationDidFinishLaunching:。否则,事件根本不会发送,因为应用程序尚未及时注册。
答案 2 :(得分:2)
这不是委托方法。您需要为getURL事件实现Apple Event处理程序。
幸运的是,这正是Apple使用to demonstrate implementing an Apple Event handler的情况。
答案 3 :(得分:0)
要实现一个协议处理程序,您可以选择(例如在Safari首选项中)作为“默认浏览器”,并且响应HTTP / HTTPS将启动它,您需要做一些事情。
将.scriptSuite和.scriptTerminology文件添加到项目资源中。这些将告诉Mac OS X您将处理GetURL命令。
将CFBundleURLTypes密钥添加到Info.plist文件中,其中列出了您的应用将处理的“网址方案”。
同样在Info.plist中,添加值为YES的NSAppleScriptEnabled键。
将新类作为NSScriptCommand的子类添加到应用程序中,并实现 - (id)performDefaultImplementation选择器。在此功能中,您将在[self directParameter]中找到单击的URL。将此传递给您应用的网址处理程序!
有关详细信息,请查看文章: http://www.xmldatabases.org/WK/blog/1154_Handling_URL_schemes_in_Cocoa.item