ส่วนขยายเว็บ Platypush ช่วยให้ปรับแต่งเบราว์เซอร์ของคุณและเชื่อมโยงสิ่งต่างๆ เข้าด้วยกันได้อย่างง่ายดาย

บทความฉบับอัปเดตนี้มีอยู่ใน บล็อก Platypush

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

เป็นยุคที่ส่วนขยายอันทรงพลังถือกำเนิดขึ้นซึ่งสามารถเปลี่ยนแปลงหลายสิ่งหลายอย่างในเบราว์เซอร์ได้อย่างลึกซึ้ง (เช่น Vimperator ที่ปัจจุบันเลิกใช้แล้ว ซึ่งสามารถออกแบบ UI ของเบราว์เซอร์ใหม่ทั้งหมดเพื่อให้ดูและทำงานเหมือนเป็นกลุ่ม) และ สคริปต์ผู้ใช้ เป็นวิธีที่มีประสิทธิภาพที่ผู้ใช้สามารถใช้ประโยชน์เพื่อเรียกใช้สิ่งที่พวกเขาชอบได้ทุกที่ที่ต้องการ ฉันเคยใช้สคริปต์แบบกำหนดเองของ Vimperator บ่อยครั้งเพื่อจับคู่ลำดับของคีย์ที่ฉันต้องการกับการดำเนินการแบบกำหนดเองที่ฉันต้องการ — แค่สร้างโมเดลเป็น JavaScript ธรรมดา และฉันเคยใช้สคริปต์ผู้ใช้บ่อยครั้งเช่นกัน — สคริปต์เหล่านั้นยังคงมีอยู่ แต่มีข้อจำกัดมากกว่าเมื่อก่อน

ส่วนขยายเว็บและแอปในยุคตะวันตกนั้นหายไปหมดแล้ว ใช้เวลาไม่นานนักก่อนที่ผู้ประสงค์ร้ายจะตระหนักว่าเสรีภาพที่มอบให้กับส่วนขยายเว็บทำให้พวกเขาเป็นเวกเตอร์ที่สมบูรณ์แบบในการเรียกใช้มัลแวร์/สปายแวร์โดยตรงภายในเบราว์เซอร์ ซึ่งในหลายกรณีสามารถข้ามชั้นป้องกันมัลแวร์หลายชั้นได้ และส่วนขยายเว็บรุ่นนั้นก็มีปัญหาเรื่องการกระจายตัวอีกประการหนึ่ง Firefox และ Chrome ได้พัฒนา API ของตัวเอง (เช่น XUL และ Chrome Apps ของ Mozilla) ซึ่งไม่มีการทับซ้อนกันมากนัก นั่นทำให้งานพัฒนาส่วนขยายเว็บที่กำหนดเป้าหมายไปยังเบราว์เซอร์หลายตัวเป็นประสบการณ์ที่มีราคาแพงมาก และส่วนขยายและแอปจำนวนมากมีให้ใช้งานสำหรับเบราว์เซอร์ใดเบราว์เซอร์หนึ่งเท่านั้น

กรณีของการรักษาความปลอดภัยที่มากขึ้น การแยกข้อกังวล และการกระจายตัวที่น้อยลง ทำให้เกิดการโยกย้ายไปสู่ ​​WebExtension API ที่ทันสมัย ประมาณปลายปี 2017 ทั้ง "Mozilla" และ "Google" ยุติการสนับสนุน API ก่อนหน้าในเบราว์เซอร์ที่เกี่ยวข้อง พวกเขายังเพิ่มข้อจำกัดเพิ่มเติมสำหรับส่วนเสริมและสคริปต์ที่ไม่ได้รับการอนุมัติในร้านค้าของตน (Firefox เวอร์ชันล่าสุดอนุญาตให้คุณติดตั้งส่วนขยายที่เผยแพร่ในร้านค้าอย่างถาวรเท่านั้น) และเพิ่มข้อจำกัดและการตรวจสอบเพิ่มเติมในกระบวนการตรวจสอบ

API ใหม่ทำให้ผู้ประสงค์ร้ายแฮ็กผู้ใช้ผ่านเบราว์เซอร์ได้ยากขึ้น และยังช่วยลดอุปสรรคที่จำเป็นในการพัฒนาส่วนขยายข้ามเบราว์เซอร์ได้อย่างมาก อย่างไรก็ตาม ในทางกลับกัน ยังได้ลดระดับความอิสระในการขยายเวลาลงอย่างมากอีกด้วย ส่วนขยายหลายรายการที่ต้องการการผสานรวมอย่างลึกซึ้งกับเบราว์เซอร์ (เช่น Vimperator และ Postman) ตัดสินใจย้ายไปยังแอปแบบสแตนด์อโลนหรือเพียงละทิ้งความพยายาม และสคริปต์ผู้ใช้ได้กลายเป็นฟีเจอร์เฉพาะกลุ่มที่เกินบรรยายมากขึ้นโดยมีข้อจำกัดมากกว่าที่เคยเสนอโดยส่วนขยายของบุคคลที่สาม เช่น Greasemonkey/Tampermonkey user-scripts API ล่าสุดของ Firefox เป็นทางเลือกที่น่าหวังในการฟื้นฟูพลังของคลื่นในอดีต แต่จนถึงขณะนี้มีเพียง Firefox เท่านั้นที่สนับสนุน

ในฐานะผู้ใช้ระดับสูง แม้ว่าฉันจะเข้าใจถึงแรงจูงใจทั้งหมดที่ทำให้นักพัฒนาเบราว์เซอร์ตัดสินใจเพิ่มการฟันดาบ/แซนด์บ็อกซ์สำหรับส่วนขยาย แต่ฉันยังคงคิดถึงช่วงเวลาเหล่านั้นที่เราสามารถปรับแต่งเบราว์เซอร์ของเราได้อย่างลึกซึ้ง และสิ่งที่เบราว์เซอร์สามารถทำได้ตามที่คุณต้องการ ฉันสร้าง "Platypush" ขึ้นมาในช่วงหลายปีที่ผ่านมาเพื่อแก้ปัญหาความต้องการความสามารถในการขยายและการปรับแต่งที่ไม่มีที่สิ้นสุดในฝั่งแบ็กเอนด์ ด้วยทุกสิ่งที่มาจาก API และแพลตฟอร์มที่สม่ำเสมอและสอดคล้องกัน (สำหรับผู้ที่ยังไม่คุ้นเคยกับมัน โปรดดูบทความขนาดกลาง อ้างอิงใน README หรือ Wiki บนหน้า GitHub เพื่อเริ่มต้น) ฉันคิดว่าการใช้ปรัชญาเดียวกันนี้กับบริบทของเว็บเบราว์เซอร์ของฉันน่าจะเป็นขั้นตอนต่อไปที่เป็นธรรมชาติ ด้วยส่วนขยายเว็บ Platypush ฉันได้พยายามสร้างโซลูชันสำหรับความต้องการหลายประการที่ผู้ใช้ระดับสูงจำนวนมากต้องเผชิญ

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

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

เมื่อฉันทำงานกับแล็ปท็อป บางครั้งฉันอาจต้องการดำเนินการบางอย่างบนอุปกรณ์อื่น — เช่น ส่งลิงก์ไปยังโทรศัพท์ของฉัน เปิดไฟหรือพัดลม เล่นวิดีโอที่กำลังเล่นบนแล็ปท็อปบน Media Center ของฉัน เล่นเพลย์ลิสต์ Spotify ที่กำลังเล่นในห้องนอนของฉันในห้องนั่งเล่น — หรือในทางกลับกัน — และอื่นๆ แน่นอนว่าสำหรับปัญหาเหล่านี้ มีวิธีแก้ไขปัญหาส่วนหน้าของ Platypush/HomeAssistant/OpenHAB/BigCorp Inc. แต่โดยทั่วไปแล้วคุณจะต้องยกมือออกจากแล็ปท็อปเพื่อหยิบโทรศัพท์ หรือเปิด/สลับไปที่แท็บด้วยเว็บ แอพที่แพลตฟอร์มของคุณมอบให้ ค้นหาเมนู/ตัวเลือกที่ถูกต้อง เลื่อนดูเล็กน้อย จากนั้นจึงดำเนินการ ผู้ช่วยด้านเสียงเป็นอีกทางเลือกหนึ่ง (และ Platypush "ให้การบูรณาการ" ที่ทำให้คุณสามารถเข้าถึงเทคโนโลยีเสียงต่างๆ มากมาย) แต่การพูดคุยตลอดทั้งวันเพื่อดำเนินการใดๆ ยังไม่ใช่กระบวนการที่ราบรื่นและรวดเร็วที่หลายคนต้องการ - และไม่ควร เป็นหนทาง เท่านั้น การลดเวลาในการดำเนินการสำหรับฉันหมายถึงสามารถเรียกใช้การกระทำนั้นได้ทันที (ภายในเวลาไม่เกินสามครั้งหรือการกดแป้นพิมพ์) จากแท็บใดๆ หรือจากแถบเครื่องมือเอง โดยไม่คำนึงถึงการกระทำ

แน่นอนว่ามีส่วนขยายเว็บบางส่วนที่สามารถแก้ไขปัญหาเหล่านั้นได้ แต่นั่นมักจะเกี่ยวข้องกับ:

  • อาศัยวิธีแก้ปัญหาของผู้อื่นสำหรับปัญหาของคุณ และวิธีการแก้ปัญหานั้นไม่จำเป็นต้องเหมาะสมที่สุดสำหรับกรณีการใช้งานของคุณ
  • ทำให้เบราว์เซอร์ของคุณเสียหายด้วยส่วนขยายจำนวนมากเพื่อดำเนินการประเภทต่างๆ การส่งลิงก์ไปยังอุปกรณ์อื่นอาจเกี่ยวข้องกับการติดตั้งส่วนขยาย Pushbullet/Join การเล่นสื่อบน Kodi ส่วนขยายอื่น การเล่นสื่อบน Chromecast ส่วนขยายอื่น บันทึกลิงก์ไปยัง Instapaper/Evernote/Pocket หรือส่วนขยายอื่น ๆ การแชร์บน Twitter/Facebook ยังมีส่วนขยายเพิ่มเติม การควบคุมฮับบ้านอัจฉริยะของคุณเป็นส่วนขยายอื่น... และรายการจะดำเนินต่อไป จนกว่าแถบเครื่องมือของเบราว์เซอร์ของคุณจะเต็มไปด้วยไอคอน และคุณจำไม่ได้ด้วยซ้ำว่าบางส่วนทำอะไร - เอาชนะวัตถุประสงค์ทั้งหมดในการปรับเวลาให้เหมาะสมที่สุด - บริบทของเว็บเบราว์เซอร์
  • และแน่นอนว่า การติดตั้งส่วนขยายมากเกินไปจะเพิ่มพื้นที่เสี่ยงในการโจมตีเบราว์เซอร์ของคุณ — และนั่นคือปัญหาที่ WebExtensions API ควรจะแก้ไขตั้งแต่แรก

ฉันเริ่มต้นการเดินทางครั้งนี้ด้วยการสร้างส่วนขยายเว็บง่ายๆ ที่ฉันสามารถใช้เพื่อแก้ไขข้อบกพร่องคำสั่ง Platypush ที่ดำเนินการบน RaspberryPis และอุปกรณ์อัจฉริยะอื่นๆ รอบๆ บ้านของฉันผ่านทางเว็บ API/websocket/MQTT ได้อย่างรวดเร็ว จากนั้น ฉันพบว่าฉันสามารถใช้วิธีแก้ปัญหาเดียวกันนี้เพื่อแก้ไขปัญหาในการเพิ่มประสิทธิภาพเวลาในการดำเนินการได้ เช่น ปัญหา “ฉันต้องการเปิดไฟตอนนี้โดยไม่ต้องหยิบโทรศัพท์หรือเปลี่ยนแท็บหรือลุกขึ้นยืน ในขณะที่ฉันกำลังเขียนบทความ Medium บนแล็ปท็อป” และนั่นหมายความว่าไม่ว่าจะจากแถบเครื่องมือ (โดยเฉพาะอย่างยิ่งกับการกระทำทั้งหมดที่จัดกลุ่มภายใต้ปุ่มส่วนขยายและ UI เดียวกัน) หรือผ่านเมนูบริบทคลิกขวา เช่น การกระทำของเบราว์เซอร์ดั้งเดิม ความสามารถในการเรียกใช้การกระทำ Platypush จากเบราว์เซอร์ของฉันบนอุปกรณ์ระยะไกล หมายความว่าฉันสามารถควบคุมอุปกรณ์หรือ API ระยะไกลจากอินเทอร์เฟซเดียวกันได้ ตราบใดที่มีปลั๊กอิน Platypush เพื่อโต้ตอบกับอุปกรณ์/API นั้น

แต่เป้าหมายนั้นยังไม่เพียงพอสำหรับฉัน ไม่ใช่การกระทำทั้งหมดที่ฉันต้องการเรียกใช้ทันทีจากตำแหน่งใดก็ตามในเบราว์เซอร์ที่สามารถแปลเป็นการกระทำ Platypush แบบอะตอมมิกได้ ขั้นตอนระยะไกลของ Platypush สามารถช่วยในการรันตรรกะที่ซับซ้อนมากขึ้นบนแบ็กเอนด์ได้อย่างแน่นอน แต่ฉันต้องการให้ส่วนขยายครอบคลุมกรณีการใช้งานของฉันที่ต้องมีปฏิสัมพันธ์กับบริบทของเบราว์เซอร์ เช่น “เล่นวิดีโอนี้บน Chromecast ของฉัน (ใช่ แม้ว่าฉันจะ' m บน Firefox)”, “แปลหน้านี้และตรวจสอบให้แน่ใจว่าผลลัพธ์ไม่เหมือนกับเว็บไซต์ปี 1997 (ใช่ แม้ว่าฉันจะใช้ Firefox ก็ตาม)”, “ดาวน์โหลดลิงก์ Magnet นี้บน NAS ของฉันโดยตรง” และอื่นๆ บน. ไปจนถึงตะขอเหตุการณ์แบบกำหนดเองที่สามารถตอบสนองต่อเหตุการณ์ Platypush ที่ถูกกระตุ้นโดยอุปกรณ์อื่น ๆ ที่มีตรรกะแบบกำหนดเองที่ทำงานในเบราว์เซอร์ — สิ่งต่าง ๆ เช่น “ซิงโครไนซ์คลิปบอร์ดบนแล็ปท็อปหากอุปกรณ์ Platypush ตัวอื่นส่ง ClipboardEvent”, “ส่งการแจ้งเตือน ไปยังเบราว์เซอร์ที่มีข้อความพูดเมื่อปลั๊กอิน Google Assistant ทริกเกอร์ ResponseEvent” หรือเมื่อเซ็นเซอร์ทำงานเกินเกณฑ์ที่กำหนด เป็นต้น

ฉันต้องการความสามารถในการกำหนดการกระทำเหล่านี้ทั้งหมดผ่าน JavaScript Native API ซึ่งคล้ายกับที่ Greasemonkey/Tampermonkey มอบให้ แต่ในขณะที่สคริปต์ผู้ใช้ส่วนใหญ่ที่ส่วนขยายเหล่านั้นให้มาทำงานเฉพาะในบริบทของหน้าเว็บเท่านั้น ฉันต้องการแยกส่วนย่อยสคริปต์ของฉันออกจากหน้าเว็บ และสร้าง API ที่ให้การเข้าถึงทั้งบริบทของเบราว์เซอร์ การดำเนินการ Platypush ที่พร้อมใช้งาน บนอุปกรณ์ระยะไกลอื่นๆ เพื่อเรียกใช้โค้ดพื้นหลังเพื่อตอบสนองต่อเหตุการณ์ที่กำหนดเอง และเพื่อซิงโครไนซ์การกำหนดค่าระหว่างอุปกรณ์ต่างๆ ได้อย่างง่ายดาย มาดูส่วนขยายสั้นๆ เพื่อดูว่าคุณสามารถทำอะไรได้บ้าง

การติดตั้งและการใช้งาน

ขั้นแรก คุณต้องมีบริการ Platypush ที่ทำงานอยู่ที่ใดที่หนึ่ง หากคุณยังไม่เคยลองมาก่อน โปรดดูลิงก์ใดๆ ในส่วนก่อนหน้าเพื่อเริ่มต้น (ฉันแน่ใจว่าการติดตั้ง การกำหนดค่า และการเริ่มต้นสภาพแวดล้อมพื้นฐานใช้เวลาไม่เกินห้านาที ฉันสัญญาว่า: ) )) นอกจากนี้ ตรวจสอบให้แน่ใจว่าคุณเปิดใช้งาน "แบ็กเอนด์ HTTP" ใน config.yaml เนื่องจากเว็บเซิร์ฟเวอร์เป็นช่องทางที่ส่วนขยายใช้เพื่อสื่อสารกับเซิร์ฟเวอร์ เมื่อคุณมีอินสแตนซ์ Platypush ทำงานอยู่เช่น RaspberryPi เซิร์ฟเวอร์อื่นหรือแล็ปท็อปของคุณ รับส่วนขยายเว็บ:

คุณยังสามารถสร้างส่วนขยายจากแหล่งที่มาได้ ขั้นแรก ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง npm แล้ว จากนั้นทำการโคลน repo:

git clone https://github.com/BlackLight/platypush-webext

ติดตั้งการพึ่งพาและสร้างส่วนขยาย:

npm install
npm run build

เมื่อสิ้นสุดกระบวนการ คุณควรมีโฟลเดอร์ dist พร้อมด้วย manifest.json

  • ใน Chrome (หรือเบราว์เซอร์ที่ใช้ Chromium) ให้ไปที่ส่วนขยาย -> โหลด Unpacked แล้วเลือกโฟลเดอร์ dist
  • ใน Firefox ให้ไปที่ about:debugging -› Firefox นี้ -› โหลด Add-on ชั่วคราว และเลือกไฟล์ manifest.json

โปรดทราบว่า Firefox เวอร์ชันล่าสุด "รองรับเฉพาะ" ส่วนขยายที่คลายแพ็กแล้ว (เช่น ส่วนขยายใดๆ ที่ไม่ได้โหลดบนเว็บไซต์ส่วนเสริมของ Firefox) จนถึง about:debugging ซึ่งหมายความว่าส่วนขยายชั่วคราวใดๆ จะหายไปเมื่อรีสตาร์ทเบราว์เซอร์ อย่างไรก็ตาม การคืนค่าการกำหนดค่าของส่วนขยาย Platypush เมื่อติดตั้งใหม่นั้นเป็นกระบวนการที่รวดเร็วมาก

เมื่อติดตั้งในเบราว์เซอร์แล้ว ไอคอนส่วนขยายจะปรากฏในแถบเครื่องมือ

คลิกลิงก์ที่มีอยู่เพื่อเปิดแท็บการกำหนดค่าส่วนขยายและเพิ่มอุปกรณ์ Platypush ของคุณในการกำหนดค่า

เมื่อเพิ่มอุปกรณ์แล้ว ให้คลิกที่ชื่อจากเมนูและเลือก Run Action

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

คุณสามารถใช้อินเทอร์เฟซนี้เพื่อดำเนินการใดๆ บนอุปกรณ์ระยะไกลใดๆ ก็ได้ตราบใดที่มีปลั๊กอินติดตั้งและกำหนดค่าไว้ — การจัดการระบบไฟล์ การควบคุม Media Center ระบบสั่งงานด้วยเสียง กล้อง สวิตช์ รับข้อมูลจากเซ็นเซอร์ การจัดการบริการคลาวด์ คุณ ตั้งชื่อมัน. คุณยังสามารถเรียกใช้ขั้นตอนที่จัดเก็บไว้ในอุปกรณ์ระยะไกลได้อีกด้วย ชื่อการดำเนินการจะขึ้นต้นด้วย procedure และคุณยังสามารถส่ง URL ในแท็บที่ใช้งานอยู่เพื่อให้ดำเนินการเป็นอาร์กิวเมนต์โดยใช้ตัวแปรพิเศษ $URL$ เป็นค่าการดำเนินการได้อีกด้วย ตัวอย่างเช่น คุณสามารถใช้เพื่อสร้างการดำเนินการที่ส่ง URL ปัจจุบันไปยังอุปกรณ์เคลื่อนที่ของคุณผ่านทาง pushbullet.send_note โดยตั้งค่าทั้ง body และ url เป็น $URL$ เมื่อคุณพอใจกับการกระทำของคุณแล้ว คุณสามารถบันทึกเพื่อให้สามารถใช้ได้ทั้งจากแถบเครื่องมือและเมนูบริบทของเบราว์เซอร์

หากคุณต้องการเพียงวิธีดำเนินการ Platypush จากเบราว์เซอร์ของคุณจากระยะไกล จริงๆ แล้วนี่คือทั้งหมดที่คุณต้องการ การดำเนินการจะพร้อมใช้งานจากแถบเครื่องมือส่วนขยาย:

และจากเมนูบริบท:

คุณสามารถดีบัก/แก้ไขการดำเนินการที่เก็บไว้ได้อย่างง่ายดายจากแท็บ Stored Action ในหน้าการกำหนดค่าของส่วนขยาย

อีกวิธีหนึ่ง (และมีประสิทธิภาพมากที่สุด) ในการกำหนดการกระทำแบบกำหนดเองคือการใช้สคริปต์ สคริปต์สามารถใช้เพื่อรวม Platypush API (หรือ API อื่นๆ) และ API ของเบราว์เซอร์เข้าด้วยกัน

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

หน้านี้ยังมีลิงก์ไปยัง "สรุปสาระสำคัญ" ที่แสดงตัวอย่างสำหรับส่วนต่างๆ ที่มีอยู่ของ API โดยสรุป นี่คือส่วนที่สำคัญที่สุดที่คุณสามารถใช้เพื่อสร้างสคริปต์ผู้ใช้ของคุณ:

  • args มีข้อมูลบริบทที่เกี่ยวข้องสำหรับสคริปต์ของคุณ เช่น เป้าหมาย Platypush host, tabId และองค์ประกอบ target หากเรียกการกระทำจากเมนูบริบทบนเพจ
  • app เปิดเผย API ที่พร้อมใช้งานกับสคริปต์

ในบรรดาวิธีการที่เปิดเผยโดย app:

  • app.getURL ส่งคืน URL ในแท็บที่ใช้งานอยู่
  • app.setURL เปลี่ยน URL ที่แสดงในแท็บที่ใช้งานอยู่ ในขณะที่ app.openTab เปิด URL ในแท็บใหม่
  • app.notify(message, title) แสดงการแจ้งเตือนของเบราว์เซอร์
  • app.run ดำเนินการการกระทำบนอุปกรณ์ Platypush ระยะไกล

ตัวอย่างเช่น นี่เป็นการดำเนินการที่เป็นไปได้ในการแคสต์วิดีโอ YouTube ไปยังอุปกรณ์ Chromecast เริ่มต้น:

  • app.axios.[get|post|put|delete|patch|head|options]: API ยังเปิดเผย API Axios เพื่อทำการเรียก AJAX แบบกำหนดเองไปยังตำแหน่งข้อมูลระยะไกล ตัวอย่างเช่น หากคุณต้องการบันทึก URL ปัจจุบันลงในบัญชี Instapaper ของคุณ:
  • app.getDOM ส่งคืน DOM/เนื้อหาของเพจปัจจุบัน (เป็นองค์ประกอบ Node) ในขณะที่ app.setDOM แทนที่ DOM/เนื้อหาของเพจ (กำหนดเป็นสตริง) ตัวอย่างเช่น คุณสามารถรวม DOM API ที่ให้มากับ ปลั๊กอิน Platypush Translate เพื่อแปลหน้าเว็บได้ทันที:
  • API ส่วนขยายยังเปิดเผย Mercury Reader API เพื่อลดความซับซ้อน/กลั่นกรองเนื้อหาของหน้าเว็บ คุณสามารถรวมองค์ประกอบต่างๆ ที่เคยพบเห็นมาไว้ในสคริปต์ที่ทำให้เนื้อหาของหน้าเว็บง่ายขึ้นเพื่อให้อ่านง่ายขึ้นหรือทำให้เป็นมิตรกับเครื่องพิมพ์มากขึ้น:
  • สุดท้ายนี้ คุณสามารถเข้าถึงองค์ประกอบ target ได้ หากคุณเรียกใช้การดำเนินการผ่านเมนูบริบท (เช่น คลิกขวาที่รายการบนเพจ) เนื่องจากข้อจำกัดของ WebExtensions API (ซึ่งสามารถส่งผ่านออบเจ็กต์ที่ทำให้เป็นอนุกรมของ JSON ได้เท่านั้น) องค์ประกอบ target จะถูกส่งผ่านบน args เป็นสตริง แต่คุณสามารถแปลงเป็นออบเจ็กต์ DOM ได้อย่างง่ายดาย (และคุณสามารถแปลง HTML ใด ๆ เป็น DOM) ผ่าน วิธีการ app.HTML2DOM ตัวอย่างเช่น คุณสามารถขยายสคริปต์ผู้ใช้ YouTube เริ่มต้นไปยัง Chromecast เพื่อแคสต์รายการเสียงหรือวิดีโอใดๆ ที่ปรากฏบนหน้าเว็บ:

ด้วยบล็อกพื้นฐานเหล่านี้ คุณควรจะสามารถสร้างการกระทำของเบราว์เซอร์ที่กำหนดเองได้ตามที่คุณต้องการ ตัวอย่างบางส่วน:

  • แปลงหน้าเว็บปัจจุบันเป็น PDF ผ่าน "ปลั๊กอิน Platypush webpage simplify" และส่งไปยัง Kindle ของคุณเป็นไฟล์แนบผ่าน "ปลั๊กอิน Platypush GMail"
  • ส่งอีเมลถึงบุคคลที่มีข้อความที่เลือกบนเพจ
  • แปลข้อความที่เลือกบนหน้าได้ทันที
  • แชร์ลิงก์ปัจจุบันไปที่ Twitter/Facebook/LinkedIn (และทิ้งส่วนขยายการแชร์ไปยังโซเชียลอื่นๆ ทั้งหมดออกไป)
  • ดาวน์โหลดลิงก์แม่เหล็ก/ทอร์เรนต์บนเพจไปยัง NAS ของคุณโดยตรง

สำรองและกู้คืนการกำหนดค่า

สุดท้ายนี้ คุณสามารถแก้ไข สำรองข้อมูล และคืนค่าการกำหนดค่าส่วนขยายได้อย่างง่ายดายผ่านแท็บ การกำหนดค่า การกำหนดค่าสามารถโหลด/คัดลอกไปยังไฟล์ กู้คืนจาก/สำรองข้อมูลระยะไกลไปยังอุปกรณ์ Platypush (ดูสิ ไม่มีคลาวด์!) หรือโหลดจาก URL

งานอยู่ระหว่างดำเนินการ

ส่วนขยายยังอยู่ระหว่างการพัฒนา และฉันยินดีรับข้อเสนอแนะ ตั๋ว และคำขอดึงข้อมูลใน "หน้า GitHub" โดยเฉพาะอย่างยิ่งคุณลักษณะสองประการที่อยู่ถัดไปในแผนงานของฉัน:

บูรณาการกับโปรโตคอลซ็อกเก็ตเว็บ Platypush

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

รองรับไลบรารีบุคคลที่สามผ่าน API

ณ ขณะนี้ สคริปต์ API เปิดเผยไลบรารีตัวแยกวิเคราะห์ axios และ mercury แต่ฉันเชื่อว่าเพื่อความยืดหยุ่น จึงควรเป็นไปได้ที่จะนำเข้าไลบรารีภายนอกในสคริปต์ผู้ใช้ผ่านบางสิ่งที่เรียบง่าย เช่น:

const jquery = app.loadScript('https://some.cdn/jquery.min.js');

ในที่สุด หากโครงการได้รับแรงผลักดันเพียงพอ ฉันก็อยากจะสร้างพื้นที่เก็บข้อมูลที่ผู้ใช้สามารถแบ่งปันผลงานสร้างสรรค์ของพวกเขาได้ ตราบใดที่เราทุกคนจำไว้ว่าพลังที่ยิ่งใหญ่มาพร้อมกับความรับผิดชอบอันยิ่งใหญ่ :)

บทสรุป

ฉันเข้าใจข้อกังวลด้านความปลอดภัยและความสม่ำเสมอที่นำไปสู่การนำ WebExtensions API มาใช้ แต่ฉันก็เข้าใจด้วยว่าเหตุใดส่วนขยายจำนวนมากที่เคยอาศัยการผสานรวมกับเบราว์เซอร์ในเชิงลึกจึงปฏิเสธที่จะประนีประนอมกับ API ใหม่และได้ถูกยกเลิกไปในระหว่างนี้

ฉันพยายามอย่างมากในการพัฒนาส่วนขยายนี้ด้วย API ใหม่ เนื่องจาก WebExtensions API ปัจจุบันสร้างแซนด์บ็อกซ์จำนวนมากและทำให้ข้อมูลบางส่วนสามารถเข้าถึงได้ในบริบทเฉพาะเท่านั้น (เช่น สคริปต์พื้นหลัง สคริปต์เนื้อหา หรือบริบทป๊อปอัป) และ มันบังคับให้นักพัฒนาที่ต้องการข้อมูลและคุณสมบัติในการเข้าถึงโดยหลายส่วนของแอปพลิเคชันของตนเพื่อตั้งค่าระบบการรับส่งข้อความที่ซับซ้อนเพื่อส่งข้อมูลไปรอบๆ นอกจากนี้ยังวางข้อจำกัดอย่างหนักเกี่ยวกับส่วนของโค้ดที่สามารถดำเนินการได้จากจุดใด (ขอให้โชคดีที่พยายามหลีกเลี่ยงด้วย eval ในโค้ดของคุณ) ด้วยส่วนขยายเว็บ Platypush ฉันได้พยายามเติมเต็มช่องว่างที่เหลือจากการเลิกใช้งานส่วนขยาย/แอป/API ส่วนเสริมก่อนหน้า และเพื่อให้ผู้ใช้ระดับสูงสามารถปรับแต่งพฤติกรรมของเบราว์เซอร์ได้อย่างลึกซึ้ง ฉันยังต้องการสร้างส่วนขยายที่ทำให้ฉันเข้าถึงได้ง่าย ตั้งแต่ UI เดียวกันและปุ่มเดียวกัน ไปจนถึงโลกของอุปกรณ์อัจฉริยะที่อยู่รอบตัวฉันที่กระจัดกระจายมากขึ้น และฉันก็เบื่อที่จะเห็นพื้นที่บนแถบเครื่องมือของฉันถูกกินโดยไอคอนส่วนขยายมากมายที่สามารถทำงานได้เฉพาะงานเดียวเท่านั้น!