I\'m curious if AppleScript can access each specific tab in a browser and execute some javascript in them.
Anyone have ideas?
The function below runs JavaScript in each tab of the frontmost window in Chrome and concatenates the output. To run JavaScript in in all windows, replace window 1
with windows
.
xjss(){ osascript -e'on run {a}
set o to ""
tell app "Google Chrome" to repeat with t in (get tabs of window 1)
tell t to set o to o & (execute JavaScript a) & linefeed
end
end' -- "$1"; }
This runs JavaScript in only the frontmost tab:
xjs(){ osascript -e'on run {a}
tell app "Google Chrome" to tell active tab of window 1 to execute JavaScript a
end' -- "$1"; }
Here are similar functions for Safari:
sjss(){ osascript -e'on run {a}
set o to ""
tell app "Safari" to repeat with t in (get tabs of window 1)
tell t to set o to o & (do JavaScript a) & linefeed
end
end' -- "$1"; }
sjs(){ osascript -e'on run {a}
tell app "Safari" to tell document 1 to do JavaScript a
end' -- "$1"; }
Since some version of Chrome released in 2018, an error like this is shown by default when running an execute JavaScript
command:
78:98: execution error: Google Chrome got an error: Executing JavaScript through AppleScript is turned off. To turn it on, from the menu bar, go to View > Developer > Allow JavaScript from Apple Events. For more information: https://support.google.com/chrome/?p=applescript (12)
Safari has a similar preference in "Develop > Allow JavaScript from Apple Events" which was turned off by default in macOS version 10.11.5 (released in 2016-05-16).