2014-02-16 3 views
1

현재 Mac 용 Safari에서 Scripting Bridge을 통해 "개인 정보 보호 브라우징"을 사용할 수 있지만 성공하지는 못했습니다. 다음 코드는 같은 일을 수행하는 방법을 보여줍니다하지만 구글 크롬에 대한 (시크릿 모드를 사용할 수있는 새 창을 만들고 새로운 링크 열기) :Safari (Mac)에서 "개인 정보 보호 브라우징"을 활성화하고 새 링크를 여는 방법? Scripting Bridge

chromeBrowser = [SBApplication applicationWithBundleIdentifier:@"com.google.Chrome"]; 

ChromeWindow *window = [[[chromeBrowser classForScriptingClass:@"window"] alloc] initWithProperties:@{@"mode": @"incognito"}]; 
[chromeBrowser.windows addObject:window]; 

ChromeTab *tab = [window.tabs firstObject]; 
tab.URL = url; 
[chromeBrowser activate]; 

을하지만, 불행하게도, 사파리는 크롬에 비해 조금 다른 작품 . 각 Chrome의 창은 '비공개 브라우징'(시크릿 모드)이라는 측면에서 개별적으로 작동합니다. Safari에서 "개인 탐색"기능을 사용하면 전체 응용 프로그램에 특정 창뿐만 아니라 해당 옵션이 반영됩니다. 그 방법에 대한 아이디어, Scripting Bridge 또는 비슷한 것을 사용합니까?
감사!

답변

0

Safari의 AppleScript 사전은 개인 브라우징 모드에 액세스 할 수 없으므로 Scripting Bridge에서 직접 할 수 없습니다.

tell application "Safari" 
    set menuItemName to localized string "Private Browsing …" 
end tell 

tell application "System Events" to tell process "Safari" 
    if menu item menuItemName of menu 1 of menu bar item 2 of menu bar 1 exists then 
     click menu item menuItemName of menu 1 of menu bar item 2 of menu bar 1 
     keystroke return 
    else 
     click menu item menuItemName of menu 1 of menu bar item 2 of menu bar 1 
    end if 
end tell 

시스템 이벤트 스크립트가 스크립트 브리지를 통해 수행 할 수 없으며 직접 응용 프로그램을 스크립팅보다 느린과 flakier 그러나 그것은 :

이 같은 시스템 이벤트를 사용하여 NSAppleScript 함께 할 수 최선의 선택이 될 수 있습니다. 이 경로를 사용하는 경우 크로스 스크립팅 인 타이틀먼트에 시스템 이벤트 응용 프로그램의 번들 ID가 포함되어 있는지 확인하십시오.

+0

죄송합니다. 그게 유일한 방법인가요? 또 다른 것은 영어로 번역 된 Safari에서만 작동하며 다른 언어는 작동하지 않습니다. 언어를 몰라도 개인 정보 보호 브라우징 항목을 누를 수있는 다른 방법이 있습니까? –

+0

내가 생각할 수있는 유일한 방법입니다. Apple이 사파리 AppleScript 사전을 업데이트하지 않으면 스크립팅 브리지가 제대로 작동하지 않습니다. –

+0

그리고 영어가 아닌 시스템에서 작동하도록 답변 한 코드를 업데이트했습니다. –