Activating an Application in Applescript with the Application as a Variable
Your script works for me. Activating an application with a string variable has always worked in any version of OSX... so you have some different problem happening. The problem is not in the code you are showing.
Although your code works, you can shorten your getCurrentApp() subroutine like this...
set currentApp to my getCurrentApp()
activate application "Safari"
delay 1
activate application currentApp
to getCurrentApp()
return (path to frontmost application as text)
end getCurrentApp
You really don't even need "as text" in the subroutine if you also remove "application" from the activate line...
set currentApp to my getCurrentApp()
activate application "Safari"
delay 1
activate currentApp
to getCurrentApp()
return (path to frontmost application)
end getCurrentApp
So after all is said and done, your code could look like this...
set currentApp to path to frontmost application
activate application "Safari"
delay 1
activate currentApp
EDIT: Sometimes when you try to get the frontmost application, the applescript that you are running is the frontmost application instead of the app you think is frontmost. It's very hard to detect when this happens but I suspect this may be happening to you. So here's a subroutine that I use the get the frontmost app. This ensures that the applescript is not returned as the frontmost app. Give it a try and see if it helps...
on getFrontAppPath()
set frontAppPath to (path to frontmost application) as text
set myPath to (path to me) as text
if frontAppPath is myPath then
try
tell application "Finder" to set bundleID to id of file myPath
tell application "System Events" to set visible of (first process whose bundle identifier is bundleID) to false
-- we need to delay because it takes time for the process to hide
-- I noticed this when running the code as an application from the applescript menu bar item
set inTime to current date
repeat
set frontAppPath to (path to frontmost application) as text
if frontAppPath is not myPath then exit repeat
if (current date) - inTime is greater than 2 then exit repeat
end repeat
end try
end if
return frontAppPath
end getFrontAppPath
Related videos on Youtube
SwiftMatt
Updated on September 15, 2022Comments
-
SwiftMatt over 1 year
I'm trying to write a script that logs the current app, switches to another app, does some task, and comes back to the original app. This is what I have
set currentApp to my getCurrentApp() activate application "Safari" # Some task activate application currentApp to getCurrentApp() set front_app to (path to frontmost application as Unicode text) set AppleScript's text item delimiters to ":" set front_app to front_app's text items set AppleScript's text item delimiters to {""} --> restore delimiters to default value set item_num to (count of front_app) - 1 set app_name to item item_num of front_app set AppleScript's text item delimiters to "." set app_name to app_name's text items set AppleScript's text item delimiters to {""} --> restore delimiters to default value set MyApp to item 1 of app_name return MyApp end getCurrentApp
The weird thing is that the activate application command works if you type in a string literal, but if you pass it a string variable, it will not activate the application. Any ideas why?