我正试图弄清楚如何通过命令行在OS X上设置默认Web浏览器。我发现了这个forum post,但他们正在解决的问题是打开一个具有特定应用程序的特定URL。我正在寻找一种方法来设置默认的浏览器系统。在GitHub上有这个简洁的应用程序,名为Objektiv,它正是我所追求的,但它是一个应用程序。显然,有一个Cocoa方法来设置NSWorkSpace默认浏览器。
首选项文件com.apple.LaunchServices
需要更改,可能更多。
如何通过命令行设置不同的默认浏览器?
感谢您的帮助。
答案 0 :(得分:5)
我找到了this tool。安装后,您可以这样做:
<TextView
android:id="@+id/banner_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Esempio Titolo"
android:textAlignment="center"
android:fontFamily="serif"
android:textColor="#FFF"
android:paddingBottom="5dp"
android:background="?attr/colorShader"
android:layout_alignParentBottom="true"
android:textSize="17dp"/>
以下是未来链接defaultbrowser chrome
的完整源代码。它根据MIT许可证获得版权所有(c)2014 Margus Kerma。
404
生成文件:
#import <Foundation/Foundation.h>
#import <ApplicationServices/ApplicationServices.h>
NSString* app_name_from_bundle_id(NSString *app_bundle_id) {
return [[app_bundle_id componentsSeparatedByString:@"."] lastObject];
}
NSMutableDictionary* get_http_handlers() {
NSArray *handlers =
(__bridge NSArray *) LSCopyAllHandlersForURLScheme(
(__bridge CFStringRef) @"http"
);
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (int i = 0; i < [handlers count]; i++) {
NSString *handler = [handlers objectAtIndex:i];
dict[[app_name_from_bundle_id(handler) lowercaseString]] = handler;
}
return dict;
}
NSString* get_current_http_handler() {
NSString *handler =
(__bridge NSString *) LSCopyDefaultHandlerForURLScheme(
(__bridge CFStringRef) @"http"
);
return app_name_from_bundle_id(handler);
}
void set_default_handler(NSString *url_scheme, NSString *handler) {
LSSetDefaultHandlerForURLScheme(
(__bridge CFStringRef) url_scheme,
(__bridge CFStringRef) handler
);
}
int main(int argc, const char *argv[]) {
const char *target = (argc == 1) ? '\0' : argv[1];
@autoreleasepool {
// Get all HTTP handlers
NSMutableDictionary *handlers = get_http_handlers();
// Get current HTTP handler
NSString *current_handler_name = get_current_http_handler();
if (target == '\0') {
// List all HTTP handlers, marking the current one with a star
for (NSString *key in handlers) {
char *mark = [key isEqual:current_handler_name] ? "* " : " ";
printf("%s%s\n", mark, [key UTF8String]);
}
} else {
NSString *target_handler_name = [NSString stringWithUTF8String:target];
if ([target_handler_name isEqual:current_handler_name]) {
printf("%s is already set as the default HTTP handler\n", target);
} else {
NSString *target_handler = handlers[target_handler_name];
if (target_handler != nil) {
// Set new HTTP handler (HTTP and HTTPS separately)
set_default_handler(@"http", target_handler);
set_default_handler(@"https", target_handler);
} else {
printf("%s is not available as an HTTP handler\n", target);
return 1;
}
}
}
}
return 0;
}
答案 1 :(得分:3)
我知道这并没有具体回答您的问题,但如果您只需要为Chrome执行此操作,则会有一个标记,让您将自己设置为默认浏览器:
$ open -a "Google Chrome" --args --make-default-browser
答案 2 :(得分:1)
对于较新版本的 macOS(Catalina、Big Sur),我在 Swift 中重新实现了默认浏览器工具(称为 defbro)。主要原因是使用一种“现代”编程语言,它为我提供了一种简单的方法来调整和改进它。我还添加了 json 输出 defbro --json
,以防您想用它做其他事情。
安装:brew install jwbargsten/misc/defbro
答案 3 :(得分:-2)
唯一的方法是在主设置中设置它: