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