Can AppleScript access browser tabs and execute javascript in them?

后端 未结 3 709
逝去的感伤
逝去的感伤 2021-01-31 19:47

I\'m curious if AppleScript can access each specific tab in a browser and execute some javascript in them.

Anyone have ideas?

3条回答
  •  广开言路
    2021-01-31 20:30

    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).

提交回复
热议问题