2

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

我这样做是这样的:

int options = NSWorkspaceLaunchWithoutActivation | NSWorkspaceLaunchWithErrorPresentation;

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

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

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

错误信息

现在,当我将捆绑标识符设置com.google.Chrome为更糟糕时,只打开了 4 个选项卡。Firefox ( org.mozilla.firefox) 也会打开 6 个选项卡。

4

1 回答 1

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];
}

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

于 2015-03-25T16:52:25.293 回答