【问题标题】:OS X URL handler, but when launching the application?OS X URL 处理程序,但是在启动应用程序时?
【发布时间】:2014-04-17 01:28:12
【问题描述】:

当我的应用程序启动时,我“很快”设置了一个 URL 处理程序: 在 -(void)applicationDidFinishLaunching:(NSNotification*) :

[[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(getUrl:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
LSSetDefaultHandlerForURLScheme((CFStringRef)@"myScheme", (__bridge CFStringRef)[[NSBundle mainBundle] bundleIdentifier]);

它按预期工作,只要打开带有 myScheme:// 方案的 URL,就会调用 getUrl:withReplyEvent:!

但是如果我的应用程序没有运行(退出),如果在 Safari 中我打开一个 URL,例如 myScheme://some_valuable_info?action=doSomething,它会启动我的应用程序...但是怎么做我知道我已被 URL 处理程序启动?如何获取触发我的应用程序启动的 URL?

【问题讨论】:

  • 它应该调用getUrl:withReplyEvent:,不是吗?否则我不明白一个问题。
  • 是的,它应该,但它没有。请参阅下面的答案:我没有尽快注册 eventHandler!

标签: macos cocoa


【解决方案1】:

回应自己:

eventHandler必须在 applicationWillFinishLaunching: 中注册,而不是在 applicationDidFinishLaunching: 中注册:

如果应用程序由于 URL 处理程序而启动,您仍然会收到 evenHandler 回调,但前提是您在启动过程中很快注册了它。

【讨论】:

    猜你喜欢
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    相关资源
    最近更新 更多