如何在Safari(Mac)中启用“私密浏览”并打开新链接?脚本桥

时间:2014-02-16 20:47:33

标签: objective-c cocoa safari scripting-bridge incognito-mode

我目前正在尝试通过Scripting Bridge在Safari for Mac中启用“私密浏览”,但没有任何成功。以下代码显示了如何执行相同操作,但对于Google Chrome(创建启用了隐身模式并打开新链接的新窗口):

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的工作方式略有不同。每个Chrome浏览器的窗口都在“隐私浏览”(隐身)方面单独工作。在Safari中,当您启用“隐私浏览”时,整个应用程序将反映该选项,而不仅仅是特定窗口。有关如何使用Scripting Bridge或类似内容的任何想法吗?
谢谢!

1 个答案:

答案 0 :(得分:0)

Safari的AppleScript字典不允许您访问私密浏览模式,因此无法直接在Scripting Bridge中执行此操作。

您可以使用系统事件使用NSAppleScript执行此操作,如下所示:

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

系统事件脚本无法通过Scripting Bridge完成,并且它比直接编写应用程序脚本更慢,更绚丽,但它可能是您的最佳选择。如果您采用此路由,请确保您的跨脚本授权包含System Events应用程序的软件包ID。