通过命令行设置默认Web浏览器?

时间:2013-07-08 14:05:11

标签: macos osx-mountain-lion defaults launch-services

我正试图弄清楚如何通过命令行在OS X上设置默认Web浏览器。我发现了这个forum post,但他们正在解决的问题是打开一个具有特定应用程序的特定URL。我正在寻找一种方法来设置默认的浏览器系统。在GitHub上有这个简洁的应用程序,名为Objektiv,它正是我所追求的,但它是一个应用程序。显然,有一个Cocoa方法来设置NSWorkSpace默认浏览器。

首选项文件com.apple.LaunchServices需要更改,可能更多。

如何通过命令行设置不同的默认浏览器?

感谢您的帮助。

4 个答案:

答案 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

回购:https://github.com/jwbargsten/defbro

答案 3 :(得分:-2)

唯一的方法是在主设置中设置它:

  1. 从Apple菜单中选择系统偏好设置,然后单击 一般。
  2. 单击“默认Web浏览器”弹出菜单,然后选择 像Chrome这样的网络浏览器。