关于C#:如何将Cocoa应用程序设置为默认Web浏览器?

关于C#:如何将Cocoa应用程序设置为默认Web浏览器?

How do you set your Cocoa application as the default web browser?

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

我想创建一个在用户单击其他应用程序(邮件,iChat等)中的HTTP或HTTPS链接时默认启动的应用程序。


制作可充当默认Web浏览器的应用程序需要完成四个步骤。前三个步骤允许您的应用充当相关URL方案(HTTP和HTTPS)的角色处理程序,最后一步使它成为这些方案的默认角色处理程序。

1)将您的应用程序可以处理的URL方案添加到应用程序的info.plist文件中

要添加对http://https://的支持,您需要在应用程序的info.plist文件中添加以下内容。这告诉操作系统您的应用程序能够处理HTTP和HTTP URL。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<key>CFBundleURLTypes</key>

    <dict>
        <key>CFBundleURLName</key>
        <string>http URL</string>
        <key>CFBundleURLSchemes</key>
       
            <string>http</string>
        </array>
    </dict>
    <dict>
        <key>CFBundleURLName</key>
        <string>Secure http URL</string>
        <key>CFBundleURLSchemes</key>
       
            <string>https</string>
        </array>
    </dict>
</array>

2)编写一个URL处理程序方法

操作系统要使用您的应用程序打开URL时将调用此方法。将此方法添加到哪个对象都没有关系,将在下一步中将其显式传递给事件管理器。 URL处理程序方法应如下所示:

1
2
3
4
5
6
7
8
9
- (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时要调用的对象和方法。在这里的代码中,假设我们从定义getUrl:withReplyEvent:方法的同一对象调用setEventHandler,则我将self作为事件处理程序传递。

您应该将此代码添加到应用程序的初始化代码中的某个位置。

1
2
3
4
5
6
NSAppleEventManager *em = [NSAppleEventManager sharedAppleEventManager];
[em
  setEventHandler:self
  andSelector:@selector(getUrl:withReplyEvent:)
  forEventClass:kInternetEventClass
  andEventID:kAEGetURL];

某些应用程序,包括Adobe AIR的早期版本,使用替代的WWW!/ OURL AppleEvent来请求应用程序打开URL,因此,与这些应用程序兼容,您还应该添加以下内容:

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

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

到目前为止,我们已经告诉操作系统您的应用程序是浏览器,因此我们需要将其设置为默认浏览器。

我们必须使用Launch Services API来做到这一点。在这种情况下,我们将我们的应用设置为HTTP和HTTPS链接的默认角色处理程序:

1
2
3
4
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:// URL。


如果您只想更改http(s)的默认帮助程序,则可以在Safari首选项中进行。在这里,您会找到一个下拉菜单,您可以从中选择所有已注册的http处理程序应用程序。要将应用程序自动设置为默认浏览器,请参阅前面的说明。


推荐阅读

    linux安装浏览器命令?

    linux安装浏览器命令?,官网,系统,平台,网站,管理,设备,咨询,工具,官方网站,

    用linux命令写邮件?

    用linux命令写邮件?,系统,邮箱,服务,平台,工作,资料,代码,网上,地址,信息,Lin

    linux默认命令删除?

    linux默认命令删除?,系统,软件,名称,档案,命令,文件,目录,不了,电脑,文件夹,

    linuxrm命令默认?

    linuxrm命令默认?,系统,命令,档案,工作,文件,目录,名称,文件夹,选项,子目录,l

    linux下发邮件命令?

    linux下发邮件命令?,邮箱,地址,系统,情况,服务,代码,认证,电脑,发行,检测,Lin

    linux命令默认加后缀?

    linux命令默认加后缀?,系统,文件,密码,通用,设备,命令,目录,后缀,表示,程序,l

    linux启动浏览器命令?

    linux启动浏览器命令?,系统,情况,发行,不了,官网,环境,工具,传播,基础,软件,

    linux默认浏览器命令?

    linux默认浏览器命令?,环境,系统,发行,工程,工具,浏览器,软件,情况,网站,管

    linux拒收新邮件命令?

    linux拒收新邮件命令?,系统,信息,工作,拒收,邮箱,地址,不了,网络,标准,状态,L

    linux命令下载浏览器?

    linux命令下载浏览器?,软件,系统,官网,网站,工具,名称,中心,密码,时间,设计,l

    linux发送邮件命令?

    linux发送邮件命令?,服务,邮箱,系统,情况,信息,地方,密码,地址,资料,认证,lin

    linux命令关浏览器?

    linux命令关浏览器?,系统,工作,工具,咨询,信息,平台,官方网站,管理,数据,电

    linux退出邮件命令?

    linux退出邮件命令?,系统,工作,信息,地址,工具,档案,管理,数据,时间,命令,lin

    linux查看邮件命令?

    linux查看邮件命令?,邮箱,服务,密码,系统,网络,发行,数据,设计,信息,地方,Lin

    linux查看邮件的命令?

    linux查看邮件的命令?,系统,地址,信息,管理,命令,工作,平台,文件,邮件,路径,L

    linux默认压缩命令?

    linux默认压缩命令?,系统,名称,命令,文件,工具,软件,目录,选项,文件名,格式,l

    linux默认命令行字体?

    linux默认命令行字体?,系统,工具,等级,数字,百度,情况,代码,终端,字体,字符,l

    linux默认命令行模式?

    linux默认命令行模式?,系统,密码,工具,地方,设计,设备,服务,网络,终端,界面,l

    linux命令提示符默认?

    linux命令提示符默认?,系统,标准,信息,基础,代码,软件,美元,电脑,提示符,用

    linux命令和应用程序?

    linux命令和应用程序?,软件,系统,环境,管理,基础,情况,位置,电脑,工具,中心,