on run {} -- Set these variables to suit your system. -- .... 'DownloadFolder' is the path to your normal folder for downloads -- .... 'PrivateImage' is the path and filename of the disk image to use for downloads when private browsing is enabled -- .... 'PrivateVolume' is the name of your private disk image when mounted set DownloadFolder to "/Users/myusername/Downloads/Safari" set PrivateImage to "/Users/myusername/EncryptedDownloads.sparseimage" set PrivateVolume to "EncryptedDownloads" set doSetDownloadFolder to true my check_requirements() display dialog "Set Private Browsing Mode" & return with icon 1 buttons {"Cancel", "Enable", "Disable"} set clickedButton to button returned of result -- User canceled, just quit if clickedButton is "Cancel" then error number -128 -- User wants to enable Private Browsing if clickedButton is "Enable" then if is_disk_mounted(PrivateVolume) is false then -- private disk image hasn't already been mounted, so let's do that now if mount_disk(PrivateImage) is false then -- eek. Mounting didn't work - let's just enable Private Browsing without changing Safari's download location display dialog "Could not attach private volume." & return & return & ¬ "Private browsing will be enabled, but the download folder will not be changed." with icon 2 buttons {"Cancel", "Continue"} set doSetDownloadFolder to false else -- disk mounted, ready to go set doSetDownloadFolder to true end if else -- disk image has already been mounted -- we're OK to set Safari's download location set doSetDownloadFolder to true end if -- Check if Private Browsing's already enabled, and set it if we need to if is_pb_enabled() = false then set_pb(true) -- If the image has been mounted ok, then set Safari's download location if doSetDownloadFolder is true then set_download_folder("/Volumes/" & PrivateVolume) end if -- User wants to disable Private Browsing if clickedButton is "Disable" then -- If Private Browsing's on, turn it off if is_pb_enabled() = true then set_pb(false) -- Set Safari's download folder to the normal location set_download_folder(DownloadFolder) -- If the private image is mounted, unmount it if is_disk_mounted(PrivateVolume) then unmount_disk(PrivateVolume) end if end if end run -- Some boiler-plate code to make sure GUI scripting's available and enabled on this system. on check_requirements() tell application "System Events" get system attribute "sysv" if result is greater than or equal to 4144 then -- Mac OS X 10.3.0 if UI elements enabled is false then beep display dialog "GUI Scripting is not enabled" & return & return & "Open System Preferences and check Enable Access for Assistive Devices in the Universal Access preference pane, then run this script again." with icon stop if button returned of result is "OK" then tell application "System Preferences" activate set current pane to pane "com.apple.preference.universalaccess" end tell else error number -128 end if end if else beep display dialog "This computer cannot run this script" & return & return & "The script uses GUI Scripting technology, which requires an upgrade to Mac OS X 10.3 Panther or newer." with icon caution buttons {"Quit"} default button "Quit" error number -128 end if end tell end check_requirements -- Returns TRUE if Private Browsing is currently enabled, otherwise returns FALSE on is_pb_enabled() activate application "Safari" tell application "System Events" to tell application process "Safari" set check_value to value of attribute "AXMenuItemMarkChar" of menu item "Private Browsing" of menu 1 of menu bar item "Safari" of menu bar 1 return ((check_value as string) = "3") as boolean end tell end is_pb_enabled -- Sets Private Browsing (On if State=TRUE, Off if State=FALSE) -- Also automatically dismisses the information window Safari shows when enabling Private Browsing on set_pb(state) activate application "Safari" tell application "System Events" to tell application process "Safari" if state is true then click menu item "Private Browsing" of menu 1 of menu bar item "Safari" of menu bar 1 click button "OK" of window 1 else click menu item "Private Browsing" of menu 1 of menu bar item "Safari" of menu bar 1 end if end tell end set_pb -- Sets Safari's download location -- See comment below if the script fails during the setting of the download folder on set_download_folder(dlFolder) activate application "Safari" tell application "System Events" to tell application process "Safari" click menu item "Preferences?" of menu 1 of menu bar item "Safari" of menu bar 1 click button "General" of tool bar 1 of window 1 tell pop up button 3 of group 1 of group 1 of window "General" click click menu item "Other?" of menu 1 end tell keystroke "g" using {shift down, command down} delay 2 -- NOTE: This value should be increased if the new download location doesn't appear in the Go To Folder dialog tell window "Go To Folder" set value of text field 1 to dlFolder click button "Go" end tell click button "Select" of sheet 1 of window "General" click button 1 of window "General" end tell end set_download_folder -- Mounts a disk image on mount_disk(imageFile) try do shell script "hdiutil attach " & imageFile on error number 1 return false end try return true end mount_disk -- Returns TRUE if the volume whose name matches diskName is currently mounted, FALSE otherwise. on is_disk_mounted(diskName) tell application "Finder" set diskMounted to (exists disk (diskName)) end tell return diskMounted end is_disk_mounted -- Ejects the volume whose name matches diskName. on unmount_disk(diskName) tell application "Finder" to eject the disk diskName end unmount_disk