当您提到 AppleScript 时,我想您正在使用 Mac OS X。
注册和使用自定义 URL 方案的一种简单方法是在 .plist 中定义方案:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>URLHandlerTestApp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>urlHandlerTestApp</string>
</array>
</dict>
</array>
要注册方案,请将其放入 AppDelegate 的初始化中:
[[NSAppleEventManager sharedAppleEventManager]
setEventHandler:self
andSelector:@selector(handleURLEvent:withReplyEvent:)
forEventClass:kInternetEventClass
andEventID:kAEGetURL];
每当您的应用程序通过 URL 方案激活时,都会调用定义的选择器。
事件处理方法的存根,显示如何获取 URL 字符串:
- (void)handleURLEvent:(NSAppleEventDescriptor*)event
withReplyEvent:(NSAppleEventDescriptor*)replyEvent
{
NSString* url = [[event paramDescriptorForKeyword:keyDirectObject]
stringValue];
NSLog(@"%@", url);
}
Apple 的文档:安装获取 URL 处理程序
更新
我刚刚注意到将事件处理程序安装在applicationDidFinishLaunching:
. 启用沙盒后,通过单击使用自定义方案的 URL 启动应用程序时,不会调用处理程序方法。通过稍早安装处理程序,在 中applicationWillFinishLaunching:
,该方法按预期调用:
- (void)applicationWillFinishLaunching:(NSNotification *)aNotification
{
[[NSAppleEventManager sharedAppleEventManager]
setEventHandler:self
andSelector:@selector(handleURLEvent:withReplyEvent:)
forEventClass:kInternetEventClass
andEventID:kAEGetURL];
}
- (void)handleURLEvent:(NSAppleEventDescriptor*)event
withReplyEvent:(NSAppleEventDescriptor*)replyEvent
{
NSString* url = [[event paramDescriptorForKeyword:keyDirectObject]
stringValue];
NSLog(@"%@", url);
}
在 iPhone 上,处理 URL 方案激活的最简单方法是实现 UIApplicationDelegate 的application:handleOpenURL:
-文档