2014-02-13 2 views
11

Я хочу открыть URL-адрес в Cocoa через мое приложение только в Safari. Я использую:Открыть url в сафари через приложение для какао

[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString: @"my url"]]; 

Но проблема в том, что, если мой браузер по умолчанию не Safari, то URL становится открытым в другом браузере. Но я хочу, чтобы мой URL-адрес открывался только в Safari. Скажите, пожалуйста, решение.

Спасибо :)

ответ

3

Используйте scripting bridge с сафари, чтобы открыть URL в сафари, вы найдете способ, чтобы открыть URL в файл Safari.h. Чтобы узнать больше об использовании Scripting bridge, обратитесь к link и используйте скриптовый мост с сафари и сгенерируйте Safari.h, обратитесь сюда answer.

метод, чтобы открыть URL в Сафари:

NSDictionary *theProperties = [NSDictionary dictionaryWithObject:@"https://www.google.co.in/" forKey:@"URL"]; 
SafariDocument *doc = [[[sfApp classForScriptingClass:@"document"] alloc] initWithProperties:theProperties]; 
[[sfApp documents] addObject:doc]; 
[doc release]; 
+0

Его файл: /// при открытии URL-адреса, поэтому URL-адрес не открывается. – Varun

+0

Проверьте обновленный ответ, он должен работать сейчас. – Neha

+0

Да! Это здорово! – Genevios

1

Вы не можете использовать URL, вам нужно NSString

if(![[NSWorkspace sharedWorkspace] openFile:fullPath 
          withApplication:@"Safari.app"]) 
    [self postStatusMessage:@"unable to open file"]; 
0

Чтобы открыть URL с любым приложением, вы можете использовать пусковые услуги. Функция, которую вы хотите посмотреть, - LSOpenURLsWithRole;

EDIT:
Вы должны связать рамки SystemConfiguration к вашему проекту для этого метода, имеющиеся в наличии.

Apple, ссылка док here

Например, если вы хотите открыть http://www.google.com с сафари:

//the url 
CFURLRef url = (__bridge CFURLRef)[NSURL URLWithString:@"http://www.google.com"]; 
//the application 
NSString *fileString = @"/Applications/Safari.app/"; 

//create an FSRef of the application 
FSRef appFSURL; 
OSStatus stat2=FSPathMakeRef((const UInt8 *)[fileString UTF8String], &appFSURL, NULL); 
if (stat2<0) { 
    NSLog(@"Something wrong: %d",stat2); 
} 


//create the application parameters structure 
LSApplicationParameters appParam; 
appParam.version = 0;  //should always be zero 
appParam.flags = kLSLaunchDefaults; //use the default launch options 
appParam.application = &appFSURL; //pass in the reference of applications FSRef 

//More info on params below can be found in Launch Services reference 
appParam.argv = NULL; 
appParam.environment = NULL; 
appParam.asyncLaunchRefCon = NULL; 
appParam.initialEvent = NULL; 

//array of urls to be opened - in this case a single object array 
CFArrayRef array = (__bridge CFArrayRef)[NSArray arrayWithObject:(__bridge id)url]; 

//open the url with the application 
OSStatus stat = LSOpenURLsWithRole(array, kLSRolesAll, NULL, &appParam, NULL, 0); 
//kLSRolesAll - the role with which the applicaiton is to be opened (kLSRolesAll accepts any) 

if (stat<0) { 
    NSLog(@"Something wrong: %d",stat); 
} 
0

нерест процесса и исполняющего открытый -a " Safari "http://someurl.foo также делает трюк

0
let url = URL(string:"https://twitter.com/intent/tweet")! 
NSWorkspace.shared.open([url], 
         withAppBundleIdentifier:"com.apple.Safari", 
         options: [], 
         additionalEventParamDescriptor: nil, 
         launchIdentifiers: nil) 
Смежные вопросы