你如何设置你的Cocoa应用程序作为默认的Web浏览器?

你如何设置你的Cocoa应用程序作为默认的Web浏览器?

我想创build一个默认启动的应用程序,当用户点击其他应用程序(Mail,iChat等)中的HTTP或HTTPS链接时。

有四个步骤来制作一个可以作为默认网页浏览器的应用程序。 前三个步骤允许您的应用程序充当相关URLscheme(HTTP和HTTPS)的angular色处理程序,最后一步使其成为这些scheme的默认angular色处理程序。

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时,这个方法将被操作系统调用。 添加此方法的对象并不重要,在下一步中将显式传递给事件pipe理器。 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处理方法

接下来,告诉事件pipe理器当它想要使用你的应用程序加载一个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请求应用程序打开URL,因此为了与这些应用程序兼容,还应该添加以下内容:

 [em setEventHandler:self andSelector:@selector(getUrl:withReplyEvent:) forEventClass:'WWW!' andEventID:'OURL']; 

4)将您的应用程序设置为默认浏览器

到目前为止,我们所做的一切都告诉操作系统,你的应用程序是一个浏览器 ,现在我们需要把它作为默认的浏览器

我们必须使用Launch Services API来执行此操作。 在这种情况下,我们将我们的应用程序设置为HTTP和HTTPS链接的默认angular色处理程序:

 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 

(在更改默认浏览器之前,最好先征求用户的许可。)

自定义urlscheme

值得注意的是,您也可以使用这些相同的步骤来处理您自己的自定义URLscheme。 如果您要创build自定义urlscheme,build议您将其设置在应用程序的包标识符上,以避免与其他应用程序发生冲突。 所以如果你的包ID是com.example.MyApp你应该考虑使用x-com-example-myapp:// URLs。

如果您只想更改http的默认帮助程序,则可以在Safari首选项中执行此操作。 在那里你会find一个下拉菜单,它可以让你select所有的http注册处理程序。 要自动将应用程序设置为默认浏览器,请参阅前面的说明。