advertisement

Search


Sponsored Developer Resources

Atom 1.0 Feed RSS 1.0 Feed RSS 2.0 Feed


Webloggers
Login
Home




Homebrew Safari [Updated]

   Print.Print
Email.Email weblog link
Discuss.Discuss
Blog this.Blog this
FJ de Kermadec

FJ de Kermadec
Aug. 24, 2005 01:58 AM
Permalink

Atom feed for this author. RSS 1.0 feed for this author. RSS 2.0 feed for this author.

For those of you who were too busy petting their Meerkats to look at their RSS aggregators yesterday — OK, it's really an O'Reilly insider joke here —, let me say that our editor, Derrick Story, published a blog on Safari and his personal experiences with the application.

This got me thinking about our beloved browser, currently battling in my Dock for its status of default browser — a status I change more often than socks, for testing purposes and just the kicks I get from using pop-up menus.

It turns out there is one feature out there I would really, really love to see added and its notable absence from all browsers out there is something I can't really understand. Those of us who routinely develop web sites and applications know how important it is to clear (1) caches, (2) cookies, (3) favicons and (4) history between every test lest we want to run into inexplicable behavior — and this with every browser.

The problem is that there is no way to do that that does not involve a clicking and dialog-dismissing extravaganza. Fun, fun… We have a reset Safari menu but it also clears Keychain auto-fills and that is a sanity-threatening proposition — ever worked on beta sites with 2 layers of (purely useless because non-encrypted) password protection? Using private browsing might be a workaround but it does not provide the same level of confidence-inducing foamy scrubbing I need to perform about 50 times a day.

So, what is a poor little FJ to do? Whip up AppleScript, that is! Thanks to the magic of "do shell script" commands and "rm" handlers, I now have a "Reset Safari" option that just fits my needs.

I have never loved my Scripts menu as much! If the people in Cupertino who came up with the idea could send me their address, I would gladly express a box of French cookies to them! (Oh, the same applies to the WebKit and Safari teams, by the way, who are doing a superb work with the browser, even if the very little specific feature I have in mind is not available.)

Update: I have added, as requested, the script below. Please consider it uses "rm" commands and is only in alpha stage -- it works on my little machine but I did not test on a larger scale. All disclaimers apply: use at your own risk and, please, backup your data! As they say, it comes with no warranty whatsoever, expressed or implied.


try
tell application "Finder"
-- Let's get the name of the current user
set myUserName to (do shell script "whoami")

-- Is Safari running?
set safariIsRunning to false
if (do shell script "ps -U " & myUserName) contains "Safari.app/Contents/MacOS/Safari" then set safariIsRunning to true

-- Let's quit Safari or the cleaning will not take effect
if safariIsRunning then tell application "Safari" to quit

-- Let's delete the application's cookies
try
set deleteCookies to 1
do shell script "rm -r /Users/" & myUserName & "/Library/Cookies/"
on error
set deleteCookies to 0
end try

-- Let's delete the application's caches
try
set deleteCaches to 1
do shell script "rm -r /Users/" & myUserName & "/Library/Caches/Safari/"
on error
set deleteCaches to 0
end try

-- Let's delete the application's icons
try
set deleteIcons to 1
do shell script "rm -r /Users/" & myUserName & "/Library/Safari/Icons/"
on error
set deleteIcons to 0
end try

-- Let's delete the application's history
try
set deleteHistory to 1
do shell script "rm -r /Users/" & myUserName & "/Library/Safari/History.plist"
on error
set deleteHistory to 0
end try

-- Let's delete the application's downloads folder
try
set deleteDownloads to 1
do shell script "rm -r /Users/" & myUserName & "/Library/Safari/Downloads.plist"
on error
set deleteDownloads to 0
end try

-- Let's reopen Safari if it was running when the script was called
-- Note: this does not always work! Eeek!
if safariIsRunning then tell application "Safari" to activate

-- Let's conclude by letting the user know everything is OK
end tell
if safariIsRunning then
tell application "Safari" to display alert "Safari has now been cleaned up." message "You can now resume using the application." as informational buttons "OK" default button 1 giving up after 2
else
tell application "Finder" to display alert "Safari has now been cleaned up." message "Changes have already taken effect and will be retained the next time you launch the application." as informational buttons "OK" default button 1
end if

on error TheError
tell application "Finder" to display alert "Safari could not be cleaned because of a script error." message "Below is the error returned by Apple Script, which may assist you in troubleshooting this issue:" & return & return & TheError buttons "OK" default button 1 as warning
end try

FJ de Kermadec is an author, stylist and entrepreneur in Paris, France.

Return to weblogs.oreilly.com.



Weblog authors are solely responsible for the content and accuracy of their weblogs, including opinions they express, and O'Reilly Media, Inc., disclaims any and all liabililty for that content, its accuracy, and opinions it may contain.

Creative Commons License This work is licensed under a Creative Commons License.



Sponsored by:



Weblog authors are solely responsible for the content and accuracy of their weblogs, including opinions they express, and O'Reilly Media, Inc. disclaims any and all liability for that content, its accuracy, and opinions it may contain.

For problems or assistance with this site, email