gpt4 book ai didi

objective-c - 如何使用自定义 URL 方案将 Get URL 事件发送到正在运行的应用程序?

转载 作者:搜寻专家 更新时间:2023-10-30 20:23:14 25 4
gpt4 key购买 nike

我的 Cocoa 应用程序需要处理 Get URL 事件。我想我正确地遵循了 this answer 中的步骤修改 Info.plist 并编写和注册 URL 处理程序方法。

问题:

  1. 当我在我的应用程序运行时在 Safari 中访问 mytesturl://anything 时,它会弹出一个窗口询问我是否要打开我的应用程序。如果我说是,除了图标会在停靠栏中出现一瞬间外,似乎什么也没有发生。所以它可能会尝试启动我的应用程序的另一个实例,而不是向正在运行的实例发送消息?

  2. 当我在 Firefox 中执行相同操作时,它会弹出一个窗口,要求我选择一个应用程序。那么自定义 URL 协议(protocol)预计不会在所有浏览器中工作?

信息.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>My test URL</string>
<key>CFBundleURLSchemes</key>
<array>
<string>mytesturl</string>
</array>
</dict>
</array>
...
</dict>
</plist>

源代码:

#import <Cocoa/Cocoa.h>
#include <stdio.h>

@interface Test : NSObject
{
}
- (void)test;
- (void)handleEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent;
@end

@implementation Test
- (void)test
{
NSLog(@"Started...");
char c;
scanf("%c", &c);
}

- (void)handleEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
NSURL *url = [NSURL URLWithString:[[event paramDescriptorForKeyword:keyDirectObject] stringValue]];
NSLog(@"url = %@", url);
}
@end

int main(int argc, char *argv[])
{
Test *app=[[Test alloc] init];
[[NSAppleEventManager sharedAppleEventManager] setEventHandler:app andSelector:@selector(handleEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];

[app test];

return 0;
}

最佳答案

NSAppleEventManager 需要一个 NSApplication 实例才能运行。

尝试使 Test 成为 NSApplication 的子类,并将 main 更改为如下所示:

 id app = [NSApplication sharedApplication];
[[NSAppleEventManager sharedAppleEventManager] setEventHandler:app andSelector:@selector(handleEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
[app run];

关于objective-c - 如何使用自定义 URL 方案将 Get URL 事件发送到正在运行的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4024892/

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