Trong chương trình mục tiêu-c của tôi, tôi cần mở URL trong Safari bất kể trình duyệt mặc định của hệ thống là gì. Điều đó có nghĩa rằng điều này sẽ không làm việc, bởi vì nó có thể khởi động Firefox hoặc bất cứ trình duyệt nào khác:Mở URL bằng Safari bất kể trình duyệt hệ thống nào được đặt thành
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURL: url];
Tôi nghĩ mình gần với điều này:
[ws launchAppWithBundleIdentifier: @"com.apple.Safari"
options: NSWorkspaceLaunchWithoutActivation
additionalEventParamDescriptor: NULL
launchIdentifier: nil];
chỉ cần tìm ra cách để vượt qua trong URL dưới dạng tham số ... Có cách nào dễ hơn không?
Cảm ơn!
Cập nhật: Mã sau đây khởi chạy Safari có URL mà tôi muốn nhưng Safari chấm dứt ngay lập tức! Bất cứ ý tưởng tại sao điều này là gì?
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURLs: urls withAppBundleIdentifier:@"com.apple.Safari"
options: NSWorkspaceLaunchDefault
additionalEventParamDescriptor: NULL
launchIdentifiers: NULL];
Tôi đã quan sát cùng một hành vi với LSOpenFromURLSpec
. Nếu một cá thể Safari đang chạy, nó hoạt động tốt. Nếu không có cá thể Safari nào đang chạy, nó sẽ bắt đầu một phiên bản mới và chấm dứt nó ngay lập tức.
Cập nhật 2: Safari chỉ bị treo cho các trang web có nhúng Flash. Với mã ở trên, tôi có thể mở google.com tốt, tuy nhiên Safari gặp sự cố đối với video trên YouTube chẳng hạn.
'hệ thống ("URL Safari")' hoặc một cái gì đó tương tự không hoạt động? – barrycarter
Thật không may là không. Tôi đã thử điều này từ Terminal. Safari khởi động, nhưng coi URL là tệp cục bộ và do đó không thể tìm thấy nó. – Mark
Điều này đã cho tôi đóng, nhưng nếu Safari chưa chạy, nó sẽ mở ra và chấm dứt ngay lập tức. Không có báo cáo lỗi: NSString * safariFullPath = [[NSWorkspace sharedWorkspace] fullPathForApplication: @ "Safari"]; NSArray * url = [mảng NSArrayWithObject: url]; LSLaunchURLSpec urlSpec; urlSpec.appURL = (CFURLRef) [URL NSNWithString: safariFullPath]; url urlSpec.itemURLs = (CFArrayRef); urlSpec.passThruParams = NULL; urlSpec.launchFlags = kLSLaunchAsync; urlSpec.asyncRefCon = NULL; Trạng thái OSStatus = LSOpenFromURLSpec (& urlSpec, NULL); – Mark