gpt4 book ai didi

macos - Mac OSX Mavericks 处理 CFBundleURLName "Custom url"应用程序启动的方式是否有变化?

转载 作者:行者123 更新时间:2023-12-03 00:32:10 24 4
gpt4 key购买 nike

我创建了一个应用程序,可以在任何 OSX 浏览器中从自定义 URL 启动。通过向应用程序的 plist 添加标准 CFBundleURLName 条目,效果很好。

我的应用程序的工作原理是解析自定义 URL 上的一些参数,然后对它们使用react。

例如,自定义网址为:

foobar://param1/param2/param3

当在浏览器中单击上述网址时,OSX 将启动我的应用程序并将实际的自定义网址本身作为第一个参数传递给应用程序。因此,在应用程序中,我可以读取第一个参数并获取打开应用程序的 url,并解析它以获取我需要的参数。

这在 OSX 10.5-10.8 中工作正常,但在 10.9 Mavericks 中工作似乎略有不同。也就是说,如果应用程序尚未运行,它仍然会启动应用程序,但不会将自定义 url 作为第一个参数传递 - 因此应用程序认为它只是由用户手动启动(例如从启动板中选择它),而不是直接从一个浏览器。

奇怪的是,如果应用程序已经打开,那么单击自定义 url 确实会将 url 字符串作为第一个参数发送到应用程序,并且应用程序中的功能会按预期发生。

我已经使用我的应用程序的新旧版本在 10.6->10.9 上进行了测试,并且都表现出相同的行为。 10.9 Mavericks 之前的版本首次启动时一切正常,但在 10.9 中,它们没有将 url 作为第一个参数传递,而是在已经运行后进行第二次单击。

如果有人能阐明这一点,我将非常感激。

最佳答案

您在哪里设置 URL 处理程序?它需要尽早发生。如果您当前将其放在 applicationDidFinishLaunching 中,请尝试将其移至 applicationWillFinishLaunching

以下内容对我有用,即使在我在 Safari 中打开 URL 之前应用程序尚未运行,它也会在启动时记录 URL。当我将 WillFinishLaunching 更改为 DidFinishLaunching 时,我完全看到了您所描述的行为。

@implementation AppDelegate

- (void)applicationWillFinishLaunching:(NSNotification *)notification
{
NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];
[appleEventManager setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
}

- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
NSAppleEventDescriptor *obj = [event descriptorForKeyword:keyDirectObject];
DescType type = [obj descriptorType];
if (type == typeChar) {
NSData *data = [obj data];
if (data) {
NSString *urlString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlString];
NSLog(@"url: %@", url);
}
}
}

@end

关于macos - Mac OSX Mavericks 处理 CFBundleURLName "Custom url"应用程序启动的方式是否有变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19927252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com