In meinem objective-c-Programm muss ich in Safari eine URL öffnen, unabhängig vom Standardbrowser des Systems. Das bedeutet, dass dies nicht funktionieren wird, weil es Firefox oder was auch immer anderen Browser starten könnte:Öffnen Sie die URL mit Safari, unabhängig davon, welcher Systembrowser auf
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURL: url];
Ich glaube, ich bin in der Nähe mit diesem:
[ws launchAppWithBundleIdentifier: @"com.apple.Safari"
options: NSWorkspaceLaunchWithoutActivation
additionalEventParamDescriptor: NULL
launchIdentifier: nil];
nur brauchen, um herauszufinden, wie man passiert in der URL als Parameter ... Gibt es einen einfacheren Weg?
Danke!
Update: Der folgende Code startet Safari mit der URL, die ich möchte, aber Safari wird sofort beendet! Irgendwelche Ideen, warum das ist?
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURLs: urls withAppBundleIdentifier:@"com.apple.Safari"
options: NSWorkspaceLaunchDefault
additionalEventParamDescriptor: NULL
launchIdentifiers: NULL];
Ich beobachtete das gleiche Verhalten mit LSOpenFromURLSpec
. Wenn eine Safari-Instanz ausgeführt wird, funktioniert das problemlos. Wenn keine Safari-Instanz ausgeführt wurde, startet sie eine neue und beendet sie sofort.
Update 2: Safari stürzt nur für Websites ab, die über Flash verfügen. Mit dem obigen Code kann ich google.com problemlos öffnen, Safari stürzt jedoch beispielsweise bei einem YouTube-Video ab.
'System ("Safari URL") oder etwas Ähnliches funktioniert nicht? – barrycarter
Leider nicht. Ich habe das vom Terminal aus versucht. Safari wird gestartet, behandelt die URL jedoch als lokale Datei und kann sie daher nicht finden. – Mark
Das brachte mich in die Nähe, aber wenn Safari nicht bereits läuft, wird es sofort geöffnet und beendet. Kein Fehler gemeldet: NSString * safariFullPath = [[NSWorkspace sharedWorkspace] fullPathForApplication: @ "Safari"]; NSArray * URLs = [NSArray ArrayWithObject: URL]; LSLaunchURLSpec urlSpec; urlSpec.appURL = (CFURLRef) [NSURL URLWithString: safariFullPath]; urlSpec.itemURLs = (CFArrayRef) URLs; urlSpec.passThruParams = NULL; urlSpec.launchFlags = kLSLaunchAsync; URLSpec.asyncRefCon = NULL; OSStatus status = LSOpenFromURLSpec (& urlSpec, NULL); – Mark