- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个应用程序,可以在任何 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/
如果我希望 iOS App App1 在设备上启动 App2,那么 CFBundleURLName 是否需要与 Info.plist 中的 CFBundleURLTypes 中的 CFBundleId
我创建了一个应用程序,可以在任何 OSX 浏览器中从自定义 URL 启动。通过向应用程序的 plist 添加标准 CFBundleURLName 条目,效果很好。 我的应用程序的工作原理是解析自定义
当在设备上点击此 Web 链接时,我正在使用自定义 URL 方案打开我的 iOS 应用程序:Demo77://someurl 为了设置它,我将 Demo77 作为一个项目添加到 Info.plist
我是一名优秀的程序员,十分优秀!