วิธีหยุดวิดีโอ YouTube ชั่วคราวผ่านแป้นพิมพ์ลัดหรือจากแถบเมนู


17

มีซอฟต์แวร์บางส่วนที่อนุญาตให้หยุดชั่วคราว (& ยกเลิกการหยุดชั่วคราว) วิดีโอ YouTube ที่กำลังเล่นอยู่ (หรือเป็นสื่อวิดีโอ / เสียงออนไลน์ใด ๆ ) โดยใช้แป้นพิมพ์ลัดหรือปุ่มเข้าถึงได้สะดวก (เช่นปุ่มที่ อยู่ในแถบเมนูซึ่งอยู่ที่มุมขวาบนของหน้าจอ) ยิ่งคลิกน้อยลงเท่าไหร่ก็จะยิ่งดีเท่านั้น

กุญแจสำคัญในที่นี้คือฉันต้องการความสามารถในการหยุดวิดีโอชั่วคราวในแอปพลิเคชันใด ๆ นั่นคือเมื่อ Google Chrome ไม่ใช่แอปพลิเคชันที่สำคัญที่สุด (เช่น TextEdit หรือ Microsoft Word เป็นแอปพลิเคชั่นที่สำคัญที่สุด)

iOS มีทางลัดนี้ในตัว หากมีการปัดนิ้วจากด้านล่างของหน้าจอไปด้านบนตัวควบคุมสื่อจะปรากฏขึ้น การควบคุมเหล่านี้สามารถจัดการเสียงใด ๆ และทั้งหมดที่มาในแท็บ Safari

เว็บเบราว์เซอร์ของฉันคือ Google Chrome

OS X El Capitan เวอร์ชัน 10.11.6


ฉันจะเปิดให้ทำสิ่งนี้ด้วย AppleScript (ซึ่งสามารถกำหนดให้กับชุดคีย์ใน FastScripts.app) แต่ฉันไม่สามารถจินตนาการได้ว่างานที่ซับซ้อนเช่นนี้จะเกิดขึ้นผ่าน AppleScript


1
ดังนั้นคุณกำลังมองหาโซลูชันแถบเมนูแทนที่จะแตะ Space Bar ใช่ไหม หรือคลิกเมาส์ที่ปุ่มเล่น / หยุดชั่วคราว?
Monomeeth

1
@Monomeeth โปรดดูการแก้ไขของฉัน ฉันลืมที่จะพูดถึงว่า Chrome ไม่ใช่แอปพลิเคชันที่เปิดใช้งานอยู่ วิดีโอเล่นในพื้นหลัง ดังนั้นในการหยุดวิดีโอชั่วคราวฉันต้องคลิกที่หน้าต่าง Chrome คลิกที่แท็บที่มีวิดีโอและจากนั้นฉันจะสามารถใช้ space bar หรือคลิกซ้ายเพื่อหยุดวิดีโอชั่วคราวได้
ทรงกลมของรูบิค

1
คุณกำลังมองหาบางอย่างเช่นถ้าฉันเข้าใจคำถาม: beardedspice.github.io
enzo

@enzo ผมได้ดาวน์โหลด BeardedSpice และมันก็เป็นว่าสิ่งที่ฉันกำลังมองหา BeardedSpice สมบูรณ์แบบสำหรับความต้องการของฉัน หากคุณต้องการโพสต์นี้เป็นคำตอบฉันจะยอมรับมันอย่างมีความสุข ขอบคุณ!
ทรงกลมของรูบิค

ฉันสงสัยจริงๆว่าทำไม Google ไม่ได้สร้างปุ่ม Play / Pause (F8) บนแป้นพิมพ์เพราะมันทำงานได้อย่างที่คาดไว้เมื่อคุณเยี่ยมชม Google Play Music ใน Chrome
calum_b

คำตอบ:


19

********** โซลูชันที่ปรับปรุงแล้ว **********

การอัปเดตนี้เป็นคำตอบโดยตรงสำหรับคำถามดั้งเดิมของ OP

รหัส AppleScript ต่อไปนี้จะเพิ่มรายการเมนูสถานะ "เล่น / หยุดชั่วคราว YouTube" พร้อมตัวเลือกในการเล่นหรือหยุดวิดีโอ YouTube ชั่วคราวใน Google Chrome หรือ Safari ไม่ว่าจะเห็นเบราว์เซอร์หรือไม่ก็ตาม บันทึกรหัส AppleScript ต่อไปนี้เป็นแอปพลิเคชัน "เปิดอยู่" ใน Script Editor.app

use framework "Foundation"
use framework "AppKit"
use scripting additions

property StatusItem : missing value
property selectedMenu : ""
property defaults : class "NSUserDefaults"
property internalMenuItem : class "NSMenuItem"
property externalMenuItem : class "NSMenuItem"
property newMenu : class "NSMenu"

my makeStatusBar()
my makeMenus()

on makeStatusBar()
    set bar to current application's NSStatusBar's systemStatusBar
    set StatusItem to bar's statusItemWithLength:-1.0
    -- set up the initial NSStatusBars title
    StatusItem's setTitle:"Play/Pause YouTube"
    -- set up the initial NSMenu of the statusbar
    set newMenu to current application's NSMenu's alloc()'s initWithTitle:"Custom"
    newMenu's setDelegate:me (*
    Requied delegation for when the Status bar Menu is clicked  the menu will use the delegates method (menuNeedsUpdate:(menu)) to run dynamically update.*)
    StatusItem's setMenu:newMenu
end makeStatusBar

on makeMenus()
    newMenu's removeAllItems() -- remove existing menu items
    set someListInstances to {"Play/Pause YouTube - Safari", "Play/Pause YouTube - Chrome", "Quit"}
    repeat with i from 1 to number of items in someListInstances
        set this_item to item i of someListInstances
        set thisMenuItem to (current application's NSMenuItem's alloc()'s initWithTitle:this_item action:("someAction" & (i as text) & ":") keyEquivalent:"")
        (newMenu's addItem:thisMenuItem)
        (thisMenuItem's setTarget:me) -- required for enabling the menu item
    end repeat
end makeMenus

on someAction1:sender
    clickClassName2("ytp-play-button ytp-button", 0)
end someAction1:

on someAction2:sender
    clickClassName("ytp-play-button ytp-button", 0)
end someAction2:

on someAction3:sender
    quit me
end someAction3:

to clickClassName2(theClassName, elementnum)
    if application "Safari" is running then
        try
            tell application "Safari"
                tell window 1 to set current tab to tab 1 whose URL contains "youtube"
                do JavaScript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();" in document 1
            end tell
        end try
    end if
end clickClassName2

to clickClassName(theClassName, elementnum)
    tell application "Google Chrome" to (tabs of window 1 whose URL contains "youtube")
    set youtubeTabs to item 1 of the result
    tell application "Google Chrome"
        execute youtubeTabs javascript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();"
    end tell
end clickClassName

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณต้องการให้ ... Play Pause YouTube Status Menu.app ปรากฏเฉพาะในเมนูสถานะและไม่ได้อยู่ใน Dock คุณสามารถคลิกขวาที่แอพใน Finder และเลือกตัวเลือกเพื่อ "แสดงเนื้อหาแพ็คเกจ" ในโฟลเดอร์ Contents ให้เปิดไฟล์ Info.plist ในตัวแก้ไขข้อความและเพิ่มสองบรรทัดต่อไปนี้ จากนั้นบันทึกและปิดไฟล์นั้น

<key>LSBackgroundOnly</key>
<true/>

หากคุณไม่สะดวกในการแก้ไขไฟล์. plist โดยตรงรหัส AppleScript ต่อไปนี้จะอนุญาตให้คุณเลือกแอปพลิเคชันที่จะซ่อนจาก Dock เมื่อเรียกใช้

หากแอพพลิเคชั่นที่เลือกนั้นถูกตั้งค่าให้ซ่อนอยู่จาก Dock ตัวเลือกเดียวที่คุณจะได้รับคือการยกเลิกการซ่อนแอปพลิเคชันไม่ให้ปรากฏใน Dock ในขณะที่กำลังทำงาน ... และในทางกลับกัน

สคริปต์นี้มีประโยชน์อย่างยิ่งสำหรับการซ่อน "คงแอปพลิเคชันที่เปิดอยู่" ด้วยไอคอนแอปพลิเคชันของตัวจัดการที่ไม่ทำงานและไม่ปรากฏใน Dock ขณะที่ทำงาน

property fileTypes : {"com.apple.application-bundle"}
property plistFileItem : "  <key>LSBackgroundOnly</key>" & linefeed & " <true/>"

activate
set chosenApp to (choose application with prompt ¬
    "Choose  The Application You Want Hidden From The Dock While It Is Running" as alias)

tell application "System Events" to set appName to name of chosenApp
set plistFile to ((POSIX path of chosenApp) & "/Contents/info.plist") as string
set plistFileContents to (read plistFile)
set plistFileItemExists to plistFileItem is in plistFileContents

if plistFileItemExists then
    activate
    set theChoice to button returned of (display dialog ¬
        "Would you like to un-hide " & quote & appName & quote & ¬
        " from the Dock while it's running?" buttons {"Cancel", "Un-Hide"} ¬
        default button 2 cancel button 1 with title "Make A Choice")
else
    activate
    set theChoice to button returned of (display dialog ¬
        "Would you like to hide " & quote & appName & quote & ¬
        " from the Dock while it's running?" buttons {"Cancel", "Hide"} ¬
        default button 2 cancel button 1 with title "Make A Choice")
end if

if theChoice is "Hide" then
    tell application "System Events" to tell contents of property list file plistFile ¬
        to make new property list item at end with properties ¬
        {kind:string, name:"LSBackgroundOnly", value:true}
else if theChoice is "Un-Hide" then
    tell application "System Events" to tell contents of property list file plistFile ¬
        to make new property list item at end with properties ¬
        {kind:string, name:"LSBackgroundOnly", value:false}
else
    return
end if


************ วิธีแก้ปัญหาดั้งเดิม ************

สคริปต์นี้จะคลิกที่ปุ่มเล่น / หยุดชั่วคราวในวิดีโอที่เล่นใน YouTube ใน Google Chrome ไม่ว่า Google Chrome จะมองเห็นหรือไม่ก็ตาม

to clickClassName(theClassName, elementnum)
    tell application "Google Chrome" to (tabs of window 1 whose URL contains "youtube")
    set youtubeTabs to item 1 of the result
    tell application "Google Chrome"
        execute youtubeTabs javascript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();"
    end tell
end clickClassName    

clickClassName("ytp-play-button ytp-button", 0)

นี่เป็นเวอร์ชั่นสคริปต์ที่จะทำงานกับ Safari

to clickClassName2(theClassName, elementnum)
    tell application "Safari"
        tell window 1 to set current tab to tab 1 whose URL contains "youtube"
        do JavaScript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();" in document 1
    end tell
end clickClassName2

clickClassName2("ytp-play-button ytp-button", 0)

ในความพยายามที่จะให้โซลูชั่น Apple A ที่สมบูรณ์ด้วย OP ฉันได้รับคำตอบดั้งเดิมของฉันไปอีกขั้นหนึ่งแล้ว ..

UPDATE

ในที่สุดฉันก็พบมัน ฉันสร้างแอปพลิเคชัน AppleScript ใน Xcode เดิมโครงการของฉันเริ่มต้นด้วยหน้าต่างปุ่มเดียวเพื่อควบคุมวิดีโอ YouTube ที่ใช้งานอยู่ใน Chrome หรือ Safari ในปัจจุบัน โครงการนี้มีการเติบโตเล็กน้อยในแอปพลิเคชันที่มีสาธารณูปโภคหลายอย่าง GIF นี้แสดงปุ่ม YouTube Pause ที่ควบคุม YouTube ใน Chrome และ Safari ฉันเชื่อมโยงการทำงานของปุ่มกับ AppleScript ที่ฉันเขียนไว้ในเอดิเตอร์สคริปต์

ป้อนคำอธิบายรูปภาพที่นี่

นี่เป็นภาพรวมของแอปพลิเคชั่น Xcode ที่ทำงานในไฟล์ AppDelegate.applescript

ป้อนคำอธิบายรูปภาพที่นี่

นี่คือรหัสในไฟล์ที่ฉันสร้างขึ้นเพื่อให้โปรแกรมทำงานได้

script AppDelegate

    property parent : class "NSObject"


    -- IBOutlets
    property theWindow : missing value

    to clickClassName(theClassName, elementnum) -- Handler for pausing YouTube in Chrome
        if application "Google Chrome" is running then
            try
                tell application "Google Chrome" to (tabs of window 1 whose URL contains "youtube")
                set youtubeTabs to item 1 of the result
                tell application "Google Chrome"
                    execute youtubeTabs javascript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();"
                end tell
            end try
        end if
    end clickClassName

    to clickClassName2(theClassName, elementnum) -- Handler for pausing YouTube in Safari
        if application "Safari" is running then
            try
                tell application "Safari"
                    tell window 1 to set current tab to tab 1 whose URL contains "youtube"
                    do JavaScript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();" in document 1
                end tell
            end try
        end if
    end clickClassName2

    on doSomething:sender -- Calls the Chrome YouTube Handler
        clickClassName("ytp-play-button ytp-button", 0)
    end doSomething:

    on doSomething14:sender -- Calls the Safari YouTube Handler
        clickClassName2("ytp-play-button ytp-button", 0)
    end doSomething14:

    on doSomething2:sender -- Hide and or show the Menu Bar
        tell application "System Preferences"
            reveal pane id "com.apple.preference.general"
        end tell
        tell application "System Events" to tell process "System Preferences" to tell window "General"
            click checkbox "Automatically hide and show the menu bar"
        end tell
        delay 1
        quit application "System Preferences"
    end doSomething2:

    on doSomething3:sender -- Sets Display resolution to the second lowest setting (15 inch Built In Retina Display - MBP)
        tell application "System Preferences"
            reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
        end tell
        tell application "System Events" to tell process "System Preferences" to tell window "Built-in Retina Display"
            click radio button "Scaled" of radio group 1 of tab group 1
            click radio button 2 of radio group 1 of group 1 of tab group 1
        end tell
        quit application "System Preferences"
    end doSomething3:

    on doSomething4:sender -- Sets Display resolution to the second highest setting (15 inch Built In Retina Display - MBP)
        tell application "System Preferences"
            reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
        end tell
        tell application "System Events" to tell process "System Preferences" to tell window "Built-in Retina Display"
            click radio button "Scaled" of radio group 1 of tab group 1
            click radio button 4 of radio group 1 of group 1 of tab group 1
        end tell
        quit application "System Preferences"
    end doSomething4:

    on doSomething5:sender -- Sets Display resolution to the highest setting (15 inch Built In Retina Display - MBP)
        tell application "System Preferences"
            reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
        end tell
        tell application "System Events" to tell process "System Preferences" to tell window "Built-in Retina Display"
            click radio button "Scaled" of radio group 1 of tab group 1
            click radio button 5 of radio group 1 of group 1 of tab group 1
        end tell
        quit application "System Preferences"
    end doSomething5:

    on doSomething6:sender -- Sets Display resolution to the lowest setting (15 inch Built In Retina Display - MBP)
        tell application "System Preferences"
            reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
        end tell
        tell application "System Events" to tell process "System Preferences" to tell window "Built-in Retina Display"
            click radio button "Scaled" of radio group 1 of tab group 1
            click radio button 1 of radio group 1 of group 1 of tab group 1
            delay 0.1
            click button "OK" of sheet 1
            quit application "System Preferences"
        end tell
    end doSomething6:

    on doSomething7:sender -- Displays a dialog with your current IP
        tell current application to display dialog (do shell script "curl ifconfig.io") with icon 2 buttons "OK" default button 1 with title "Your Current IP Address Is.." giving up after 5
    end doSomething7:

    on doSomething8:sender -- Shows hidden files in Finder
        do shell script "defaults write com.apple.finder AppleShowAllFiles TRUE\nkillall Finder"
    end doSomething8:

    on doSomething9:sender -- Hides hidden files in Finder if they are showing
        do shell script "defaults write com.apple.finder AppleShowAllFiles FALSE\nkillall Finder"
    end doSomething9:

    on doSomething10:sender  -- Brightness Highest
        tell application "System Preferences"
            reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
        end tell
        tell application "System Events" to tell process "System Preferences" to tell window "Built-in Retina Display"
        set value of value indicator 1 of slider 1 of group 2 of tab group 1 to 12
        end tell
        quit application "System Preferences"
    end doSomething10:

    on doSomething11:sender -- Brightness Lowest
        tell application "System Preferences"
            reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
        end tell
        tell application "System Events" to tell process "System Preferences" to tell window "Built-in Retina Display"
        set value of value indicator 1 of slider 1 of group 2 of tab group 1 to 0.1
        end tell
        quit application "System Preferences"
    end doSomething11:

    on doSomething12:sender -- Zoom
        tell application "System Events"
            key code 28 using {command down, option down}
        end tell
    end doSomething12:

    on doSomething13:sender -- Dictation On/Off
        tell application "System Events"
            keystroke "x" using {option down}
        end tell
    end doSomething13:

    on doSomething15:sender -- Enables Screensaver as Desktop background
        tell application "System Events"
            do shell script "/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background"
        end tell
    end doSomething15:

    on doSomething16:sender -- Kills Screensaver Desktop background
        try
            tell application id "com.apple.ScreenSaver.Engine" to quit
        end try
    end doSomething16:


    on applicationWillFinishLaunching:aNotification
        -- Insert code here to initialize your application before any files are opened

    end applicationWillFinishLaunching:

    on applicationShouldTerminate:sender
        -- Insert code here to do any housekeeping before your application quits


        return current application's NSTerminateNow
    end applicationShouldTerminate:

    on applicationShouldTerminateAfterLastWindowClosed:sender -- Quits app when clicking red x

        return TRUE

    end applicationShouldTerminateAfterLastWindowClosed:

end script

ฉันอัปเดตรหัสเพื่อให้แท็บ YouTube ใน Chrome ไม่จำเป็นต้องเป็นแท็บที่มองเห็นหรือใช้งานได้เมื่อคลิกปุ่มหยุดชั่วคราวของ YouTube ที่สร้างขึ้นใน Xcode

นี่คือลิงค์สำหรับดาวน์โหลดโครงการ Xcode ทั้งหมด

ป้อนคำอธิบายรูปภาพที่นี่

คำเตือน: ฟังก์ชั่นโปรแกรมรักษาหน้าจอเดสก์ท็อปจะหยุดการทำงานของแอพ หลังจากบังคับให้ออกและเปิดใหม่ฟังก์ชันสกรีนเซฟเวอร์เดสก์ท็อปเพื่อออกจากโปรแกรมรักษาหน้าจอที่ใช้งานจะทำงาน

คิดภายหลัง: ฉันอาจจะต้องห่อแต่ละรหัส AppleScript ในงบ "ลอง" เพื่อหลีกเลี่ยงข้อความแสดงข้อผิดพลาดทุกประเภทสำหรับผู้ที่เล่นกับโครงการนี้ที่ไม่มีระบบและคอมพิวเตอร์ชนิดเดียวกันที่ฉันทำ (MacBook Pro 15 "ระบบปฏิบัติการ Sierra 10.12.6)

สำหรับฟังก์ชั่นซูมในการทำงานจะต้องเปิดใช้งานในการตั้งค่าระบบ

ป้อนคำอธิบายรูปภาพที่นี่

เพื่อให้การสลับ "เปิด / ปิด Dictation" ทำงานอย่างถูกต้องทางลัดเพื่อเปิดใช้งานคำสั่งการเขียนตามคำบอกในการตั้งค่าระบบต้องตรงกับทางลัดที่ใช้ในสคริปต์

ป้อนคำอธิบายรูปภาพที่นี่

on doSomething13:sender -- Dictation On/Off
    tell application "System Events"
        keystroke "x" using {option down}
    end tell
end doSomething13:

ขณะนี้ฉันกำลังทำงานกับความสามารถในการสลับระหว่างแอปพลิเคชันที่ทำงานอยู่ที่หน้าต่างหรือแถบเมนูเท่านั้น


การตั้งสำรองที่คุณต้องการเพียงหนึ่งบรรทัดของรหัสนี้display dialing ... tell application "Google Chrome" to execute front window's active tab javascript "document.getElementsByClassName('ytp-play-button ytp-button')['0'].click();"เนื่องจาก OP ต้องการ "หยุดชั่วคราว (& ยกเลิกการหยุดชั่วคราว) วิดีโอ YouTube ที่กำลังเล่นอยู่ในขณะนี้" Google จึงเปิดแล้วและสามารถย่อให้เล็กที่สุดได้ด้วยการเล่นแท็บที่ใช้งานอยู่และโค้ดหนึ่งบรรทัดดังกล่าวจะทำหน้าที่ดังกล่าว ดังนั้นไม่จำเป็นต้องเปิดใช้งานหน้าต่างหรือในรหัสของคุณใช้launchสิ่งนี้เป็นสิ่งที่ระบุไว้ในเอกสารต่อในความคิดเห็นถัดไป ...
user3439894

3
นี่เป็นทางออกที่ฉลาดมาก! ฉันตัดสินใจที่จะไปกับโปรแกรมของบุคคลที่สาม BeardedSpice ตามที่แนะนำไว้ก่อนหน้านี้ในความคิดเห็นโดย enzo เพราะ BeardedSpice ทำงานได้แม้ว่าหน้าต่าง Chrome ที่มีวิดีโอจะถูกย่อให้เล็กสุดและหน้าต่าง Chrome นี้จะยังคงลดลง BeardedSpice ยังทำงานร่วมกับผู้เล่นสื่อออนไลน์ (ไม่ใช่เฉพาะ YouTube) แต่ฉันประหลาดใจที่คุณทราบวิธีการทำเช่นนี้ใน AppleScript
ทรงกลมของรูบิค

1
มันจะดีมากถ้าคุณต้องการ zip ไฟล์ Xcode Project และให้ลิงค์ดาวน์โหลดสำหรับไฟล์เก็บถาวร :)
user3439894

1
ฉันแค่ทำความสะอาดโค้ดเล็กน้อยและฉันจะทำสิ่งที่คุณถามในไม่ช้า :)
wch1zpink

1
ขอขอบคุณที่แบ่งปันไฟล์โครงการ ถ้าฉันสามารถโหวตคำตอบของคุณได้อีกฉันจะ :)
user3439894

1

นี่คือวิธีการที่จะได้รับในแถบเมนูด้วย AppleScript บริสุทธิ์ บันทึกเป็น Aplication ด้วยstay open after run handler:

PS ฉันขโมยรหัสสำหรับฟังก์ชั่นการเล่น / หยุดชั่วคราวจาก @ wch1zpink ดังนั้นโปรดตอบคำตอบของพวกเขาด้วย

--AppleScript: menu bar script -- Created 2017-03-03 by Takaaki Naganoya adapted by Josh Brown
--2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "AppKit"
--http://piyocast.com/as/archives/4502

property aStatusItem : missing value

on run
    init() of me
end run

on init()
    set aList to {"Google Chrome", "⏯", "", "Safari", "⏯​", "", "Quit"}
    set aStatusItem to current application's NSStatusBar's systemStatusBar()'s statusItemWithLength:(current application's NSVariableStatusItemLength)

    aStatusItem's setTitle:"🎛"
    aStatusItem's setHighlightMode:true
    aStatusItem's setMenu:(createMenu(aList) of me)
end init

on createMenu(aList)
    set aMenu to current application's NSMenu's alloc()'s init()
    set aCount to 1
    repeat with i in aList
        set j to contents of i
        if j is not equal to "" then
            set aMenuItem to (current application's NSMenuItem's alloc()'s initWithTitle:j action:"actionHandler:" keyEquivalent:"")
        else
            set aMenuItem to (current application's NSMenuItem's separatorItem())
        end if
        (aMenuItem's setTarget:me)
        (aMenuItem's setTag:aCount)
        (aMenu's addItem:aMenuItem)
        if j is not equal to "" then
            set aCount to aCount + 1
        end if
    end repeat

    return aMenu
end createMenu

on actionHandler:sender
    set aTag to tag of sender as integer
    set aTitle to title of sender as string

    if aTitle is "Quit" then
        current application's NSStatusBar's systemStatusBar()'s removeStatusItem:aStatusItem
    end if
    #Chrome
    if aTitle is "⏯" then
        clickClassName("ytp-play-button ytp-button", 0)
    end if
    #Safari
    if aTitle is "⏯​" then
        clickClassName2("ytp-play-button ytp-button", 0)
    end if
end actionHandler:

to clickClassName(theClassName, elementnum)
    tell application "Google Chrome" to (tabs of window 1 whose URL contains "youtube")
    set youtubeTabs to item 1 of the result
    tell application "Google Chrome"
        execute youtubeTabs javascript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();"
    end tell
end clickClassName

to clickClassName2(theClassName, elementnum)
    tell application "Safari"
        tell window 1 to set current tab to tab 1 whose URL contains "youtube"
        do JavaScript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();" in document 1
    end tell
end clickClassName2

1
ฉันเห็นปัญหาสองประการประการแรกหากคุณออกจากแถบเมนู Apple Tile Application Dock Tile ยังคงอยู่ที่นั่นและแอปนั้นจะต้องแยกออกจากกัน คุณสามารถเพิ่มquit คำสั่งในif aTitle is "Quit" then บล็อกหลังจากcurrent application's ...บรรทัดของรหัสเพื่อแก้ไขปัญหานี้ ปัญหาที่สองคือสัญลักษณ์ที่คุณใช้ไม่แสดงผลอย่างดีเมื่อเลือกแถบเมนูมืดและเลือกการตั้งค่าระบบทั่วไปของDock คุณไม่เห็นสัญลักษณ์จริงๆจนกว่าคุณจะวางเมาส์เหนือสัญลักษณ์เหล่านั้น คุณอาจพิจารณาเพิ่มข้อความลงในรายการเมนูที่มีสัญลักษณ์เช่น:Play/Pause YouTube ⏯​
user3439894

ขอบคุณสำหรับคำแนะนำเกี่ยวกับโหมดมืดจะปรับ ฉันจะแก้ไขปัญหาการเลิก
JBis

1
นอกจากนี้เมื่อสร้างแอปพิเศษสำหรับเมนูเช่นนี้ฉันชอบซ่อนไทล์กระเบื้องของแอปและLSUIElement = 1เพิ่มลงในname.app/Contents/Info.plistไฟล์ IMO ไม่จำเป็นต้องมีการแสดง Dock Tile ของแอพสำหรับแอพเสริมเมนูประเภทนี้
user3439894

@ user3439894 รู้ไหมว่าฉันมีแอพของฉันเพิ่มอีกฉันลืมที่จะเพิ่มความรู้สึกแบบอิสระในการแก้ไขสิ่งนั้น ๆ
JBis

นอกจากนี้โปรดทราบว่าความ--http://piyocast.com/as/archives/4502คิดเห็นในรหัสไม่สามารถใช้งานได้อีกต่อไป แต่คำตอบนี้เรียกใช้จากแถบเมนูหรือไม่ โดยผู้สร้างรหัสต้นฉบับประกอบด้วยรหัสดั้งเดิมที่เคยเป็นที่ URL นั้น คำตอบนี้ยังรวมถึงdefaults คำสั่งสำหรับซ่อน Dock Tile เช่น:defaults write /Applications/name_of_app.app/Contents/Info.plist LSUIElement -bool yes
user3439894
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.