如何将Cocoa应用程序设置为默认的Web浏览器?如何将Cocoa应用程序设置为默认的Web浏览器?
我想创建一个默认启动的应用程序,当用户点击其他应用程序(Mail,iChat等)中的HTTP或HTTPS链接时。
如何将Cocoa应用程序设置为默认的Web浏览器?如何将Cocoa应用程序设置为默认的Web浏览器?
我想创建一个默认启动的应用程序,当用户点击其他应用程序(Mail,iChat等)中的HTTP或HTTPS链接时。
有四个步骤可以创建一个可用作默认Web浏览器的应用程序。前三个步骤允许您的应用充当相关URL方案(HTTP和HTTPS)的角色处理器,并且最后一步使其成为这些方案的默认角色处理器。
1)添加URL方案您的应用程序可以处理到应用程序的Info.plist文件
要添加http://
支持和https://
你需要以下内容添加到您的应用程序的Info.plist文件。这告诉操作系统您的应用程序能够处理HTTP和HTTP URL。
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>http URL</string>
<key>CFBundleURLSchemes</key>
<array>
<string>http</string>
</array>
</dict>
<dict>
<key>CFBundleURLName</key>
<string>Secure http URL</string>
<key>CFBundleURLSchemes</key>
<array>
<string>https</string>
</array>
</dict>
</array>
2)写一个URL处理方法
此方法将由操作系统时,它要使用你的应用程序中打开URL被调用。添加此方法的对象并不重要,它将在下一步中显式传递给事件管理器。该URL处理方法应该是这个样子:
- (void)getUrl:(NSAppleEventDescriptor *)event
withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
// Get the URL
NSString *urlStr = [[event paramDescriptorForKeyword:keyDirectObject]
stringValue];
//TODO: Your custom URL handling code here
}
3)注册的URL处理方法
接下来,告知事件管理器,对象和方法时,要使用你的应用程序调用加载一个URL。在这里的代码中,我通过self
作为事件处理函数,假设我们从定义getUrl:withReplyEvent:
方法的同一个对象调用setEventHandler
。
您应该将此代码添加到应用程序初始化代码的某个位置。
NSAppleEventManager *em = [NSAppleEventManager sharedAppleEventManager];
[em
setEventHandler:self
andSelector:@selector(getUrl:withReplyEvent:)
forEventClass:kInternetEventClass
andEventID:kAEGetURL];
一些应用程序,包括Adobe AIR的早期版本中,使用替代WWW/OURL的AppleEvent以请求的应用程序打开的网址,所以要与这些应用程序兼容,你也应该增加以下内容:!
[em
setEventHandler:self
andSelector:@selector(getUrl:withReplyEvent:)
forEventClass:'WWW!'
andEventID:'OURL'];
4)设置你的应用程序为默认浏览器我们只要告诉您的应用程序是浏览器操作系统做
一切,现在我们需要使它成为默认浏览器。
我们必须使用Launch Services API来执行此操作。在这种情况下,我们设置我们的应用程序是为HTTP和HTTPS链接的默认角色处理程序:
CFStringRef bundleID = (CFStringRef)[[NSBundle mainBundle] bundleIdentifier];
OSStatus httpResult = LSSetDefaultHandlerForURLScheme(CFSTR("http"), bundleID);
OSStatus httpsResult = LSSetDefaultHandlerForURLScheme(CFSTR("https"), bundleID);
//TODO: Check httpResult and httpsResult for errors
(这也可能是最好的改变他们的默认浏览器之前询问用户的权限。)
自定义URL方案
值得一提的是,你还可以使用这些相同的步骤来处理自己的自定义URL方案。如果您要创建自定义网址方案,建议您根据应用的捆绑包标识符进行配置,以避免与其他应用发生冲突。因此,如果您的套件ID为com.example.MyApp
,则应考虑使用x-com-example-myapp://
网址。
如果您只想更改http的默认助手应用程序,则可以在Safari首选项中执行此操作。在那里你会找到一个下拉菜单,它可以让你选择所有的http注册处理程序。要自动将应用程序设置为默认浏览器,请参阅前面的说明。
启动服务是CoreServices的一部分,而不是Carbon。 (正因为如此,它仍然存在64位转换。) – 2008-11-10 16:42:30