使用NSWorkspace在浏览器中打开多个URL

时间:2015-03-25 10:52:45

标签: objective-c xcode macos cocoa nsworkspace

在我的应用中,我想在网络浏览器中打开多个网址。

我是这样做的:

int options = NSWorkspaceLaunchWithoutActivation | NSWorkspaceLaunchWithErrorPresentation;

[[NSWorkspace sharedWorkspace] openURLs: urls
                withAppBundleIdentifier: @"com.apple.safari"
                                options: options
         additionalEventParamDescriptor: nil
                      launchIdentifiers: nil];

Safari现在只能一次打开六个网址,当我使用NSWorkspaceLaunchWithErrorPresentation时,我收到以下错误消息:

  

您无法打开应用程序“Safari”,因为它没有响应。

error-message

现在,当我将软件包标识符设置为com.google.Chrome时,情况会更糟,只打开4个标签页。 Firefox(org.mozilla.firefox)也会打开6个标签。

1 个答案:

答案 0 :(得分:2)

解决您所描述的限制的一种简单方法是使用等待或休眠功能。它应该允许您打开尽可能多的URL:

-(void)openURLs {

for (int i = 0; i <= 18; i++) { // open 18 URLS for this example

        NSString *url = @"http://google.com";
        [self openURL:url];

        [NSThread sleepForTimeInterval:0.2f]; // wait .02 second
    }
}

- (void)openURL:(NSString *)url {

int options = NSWorkspaceLaunchWithoutActivation | NSWorkspaceLaunchWithErrorPresentation;

    NSArray *urls = [NSArray arrayWithObject:[NSURL URLWithString:url]];

    [[NSWorkspace sharedWorkspace] openURLs: urls
                    withAppBundleIdentifier: @"com.apple.safari"
                                    options: options
             additionalEventParamDescriptor: nil
                          launchIdentifiers: nil];
}

注意:根据您要加载网址的方式(在后台等),您可以使用调度队列使用单独的线程加载它们。