1

現在、Mac の Safari で「プライベート ブラウジング」を有効にしようとしてScripting Bridgeいますが、成功していません。次のコードは、同じことを行う方法を示していますが、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];

ただし、残念ながら、Safari は Chrome とは動作が少し異なります。各 Chrome のウィンドウは、「プライベート ブラウジング」(シークレット) に関して個別に動作します。Safari では、「プライベート ブラウジング」を有効にすると、特定のウィンドウだけでなく、アプリケーション全体にそのオプションが反映されます。Scripting Bridgeまたは同様のものを使用して、それを行う方法についてのアイデアはありますか?
ありがとう!

4

1 に答える 1

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 が含まれていることを確認してください。

于 2014-02-19T16:54:28.523 に答える