使用 Apple Remote 播放/暂停 Soundcloud 选项卡的脚本

Posted

技术标签:

【中文标题】使用 Apple Remote 播放/暂停 Soundcloud 选项卡的脚本【英文标题】:Script to Play/Pause Soundcloud tab with Apple Remote 【发布时间】:2016-09-10 17:38:39 【问题描述】:

我正在为我的 Apple Remote(通过 BetterTouchTool)开发一个 AppleScript,它将在 Soundcloud 上播放/暂停播放。

它的工作原理应该类似于 iTunes 的原生 Apple Remote ▶/❚❚ 按钮。在 SoundCloud 上,keystroke space () 正在播放/暂停播放;

如果不存在 Soundcloud 选项卡,请打开 Soundcloud 选项卡和 keystroke space ()。 如果存在一个 Soundcloud 选项卡,请选择它并选择 keystroke space(如果已播放,则为 ,否则为 )。 如果存在多个 Soundcloud 选项卡,请选择第一个和 keystroke space(如果选项卡正在播放,则 那个如果正在播放另一个选项卡,则为选项卡;如果没有正在播放选项卡,则为

到目前为止,我已经能够让它打开一个新选项卡并开始播放,或者如果已经存在一个选项卡,请选择该选项卡 - 但它不会播放/暂停 - 也不是 Soundcloud 选项卡已经处于活动状态。

tell application "Google Chrome"
    repeat with w in windows
        set i to 1
        repeat with t in tabs of w
            if URL of t starts with "https://soundcloud.com" then
                set active tab index of w to i
                set index of w to 1
                return
            end if
            set i to i + 1
        end repeat
    end repeat
    open location "https://soundcloud.com/you/likes"
    activate
    delay 3
    tell application "System Events" to keystroke space
end tell

我是 AppleScript 新手,所以很遗憾,我能做的最好的事情就是进行试验。感谢任何帮助。

【问题讨论】:

return 结束脚本。将其更改为 exit repeat 并且脚本在找到选项卡后不会停止。 open location 应该在重复循环中。否则每次都会打开。 @user309603:谢谢,我试过了,但我没有得到你所指的结果。也许我做错了?如果您愿意,请随时回答问题。 【参考方案1】:

脚本必须退出循环,并且脚本需要if 条件,像这样:

set soundcloudTab to false
tell application "Google Chrome"
    repeat with w in windows
        set i to 1
        repeat with t in tabs of w
            if URL of t starts with "https://soundcloud.com" then
                set active tab index of w to i
                set index of w to 1
                set soundcloudTab to true
                exit repeat
            end if
            set i to i + 1
        end repeat
        if soundcloudTab then exit repeat -- exit windows loop
    end repeat
    activate
    if not soundcloudTab then -- no Soundcloud tab exist
        open location "https://soundcloud.com/you/likes"
        delay 3
    end if
end tell
tell application "System Events" to keystroke space

另一种解决方案是使用javascript点击playPause按钮(无需激活标签,“Google Chrome”也无需进入前景):

set soundcloudTab to missing value
tell application "Google Chrome"
    repeat with w in windows
        tell (first tab of w whose URL starts with "https://soundcloud.com") to if exists then
            set soundcloudTab to it
            exit repeat
        end if
    end repeat
    if soundcloudTab is missing value then
        open location "https://soundcloud.com/you/likes"
        delay 3
        set soundcloudTab to active tab of front window
    end if
    tell soundcloudTab to execute javascript "document.getElementsByClassName('playControls__playPauseSkip')[0].getElementsByTagName('button')[1].click()"
end tell

【讨论】:

非常简洁的 JavaScript 解决方案,现在我的 Apple Remote 可以播放 Soundcloud :) 谢谢!【参考方案2】:

基于上述,我想出了一个更短、更不脆弱的解决方案。在我的用例中,它假设您已经打开了一个 Soundcloud 选项卡。这是主要的例程:

on controlSoundcloud(cmd)
    tell application "Google Chrome"
        repeat with theTab in every tab in every window
            if URL of theTab starts with "https://soundcloud.com" then
                execute theTab javascript "var el = document.querySelector('button.playControls__" & cmd & "'); el && el.click()"
                return
            end if
        end repeat
    end tell
end controlSoundcloud

这本身不会做任何事情。你仍然需要调用它。将这些行之一添加到脚本的末尾,具体取决于您要执行的操作。

-- play/pause
controlSoundcloud("play")
-- prev
controlSoundcloud("prev")
-- next
controlSoundcloud("next")

【讨论】:

【参考方案3】:

如果有人在这篇文章中磕磕绊绊也想用他们的 Apple Remote 控制 Soundcloud,方法如下:

假设您已经拥有BetterTouchTool,您可以为播放/暂停下一步Apple Remote标签添加触发器>上一首曲目:

对于 Play,将 Run Apple Script 指定为 Predefined Action。复制/粘贴 @jackjr300JavaScript 解决方案并点击保存。

对于下一个和上一个,粘贴相同的 JavaScript,但只需将 .getElementsByTagName('button')[1] 更改为:

.getElementsByTagName('button')[0] 上一个 .getElementsByTagName('button')[2] 下一个

【讨论】:

以上是关于使用 Apple Remote 播放/暂停 Soundcloud 选项卡的脚本的主要内容,如果未能解决你的问题,请参考以下文章

无法拦截 Siri Remote 上的“暂停”按钮 - 始终停止背景音乐并且从不继续播放

如何禁用暂停/播放通过 Airplay 连接到 Apple TV 的 AVPlayer 的功能

如何使用 html5 画布停止/播放?

音频单元图暂停和重复

如何在 Apple TV (TvOS) 中全屏播放视频

如何在 HTML 中播放多首随机歌曲