在发布时打开网址

时间:2010-01-13 19:50:07

标签: cocoa notifications launch

我必须在我的cocoa应用程序的委托中实现什么方法才能在启动时打开一个url? (http / https,在这种情况下)我已经实现了url方案,我只需要知道如何在url通知上打开我的应用程序。

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

4 个答案:

答案 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将启动它,您需要做一些事情。

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

  2. 将CFBundleURLTypes密钥添加到Info.plist文件中,其中列出了您的应用将处理的“网址方案”。

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

  4. 将新类作为NSScriptCommand的子类添加到应用程序中,并实现 - (id)performDefaultImplementation选择器。在此功能中,您将在[self directParameter]中找到单击的URL。将此传递给您应用的网址处理程序!

  5. 有关详细信息,请查看文章: http://www.xmldatabases.org/WK/blog/1154_Handling_URL_schemes_in_Cocoa.item