Screen Wake Lock API มอบวิธีป้องกันไม่ให้อุปกรณ์หรี่แสงหรือล็อกหน้าจอเมื่อแอปพลิเคชันจำเป็นต้องทํางานต่อ
Screen Wake Lock API คืออะไร
อุปกรณ์ส่วนใหญ่จะเข้าสู่โหมดสลีปอย่างรวดเร็วเมื่อไม่มีการใช้งานแบตเตอรี่ที่เหลืออยู่เพื่อไม่ให้แบตเตอรี่หมดเร็ว อย่างไรก็ตาม ในหลายๆ กรณีอยู่แล้ว ก็แต่แอปพลิเคชันบางอย่างต้องเปิดหน้าจอค้างไว้เพื่อให้การทำงานเสร็จสมบูรณ์ ตัวอย่างเช่น แอปทำอาหารที่แสดงขั้นตอนของสูตรอาหารหรือเกมอย่าง Ball Puzzle ซึ่งใช้ API การเคลื่อนไหวของอุปกรณ์ในการป้อนข้อมูล
Screen Wake Lock API มีวิธีป้องกันไม่ให้อุปกรณ์หรี่แสงและล็อกหน้าจอ ความสามารถนี้ทำให้เกิดประสบการณ์ใหม่ๆ ซึ่งก่อนหน้านี้จำเป็นต้องมีแอปเฉพาะแพลตฟอร์ม
Screen Wake Lock API ช่วยลดความยุ่งยากในการใช้วิธีแฮ็กและอาจต้องใช้วิธีแก้ปัญหาเฉพาะหน้า เครื่องมือนี้ช่วยแก้ไขปัญหาของ API รุ่นเก่าซึ่งจำกัดอยู่ที่การทำให้หน้าจอเปิดอยู่ตลอดและมีปัญหาหลายประการด้านความปลอดภัยและความเป็นส่วนตัว
กรณีการใช้งานที่แนะนำสำหรับ Screen Wake Lock API
RioRun เว็บแอปที่พัฒนาโดย The Guardian เป็นกรณีการใช้งานที่ยอดเยี่ยม (แม้จะไม่มีให้บริการอีกต่อไป) แอปจะนำคุณไปยังทัวร์เสียงเสมือนจริงของรีโอตามเส้นทางของ โอลิมปิกมาราธอนปี 2016 หากไม่มี Wake Lock หน้าจอของผู้ใช้จะปิดบ่อยขณะที่การทัวร์ชมเล่น ซึ่งทำให้ใช้งานยาก
แน่นอนว่ายังมีกรณีการใช้งานอื่นๆ อีกมากมาย เช่น
- แอปสูตรอาหารที่เปิดหน้าจอไว้ขณะที่คุณอบเค้กหรือทำอาหารมื้อเย็น
- บอร์ดดิ้งพาสหรือแอปตั๋วที่เปิดหน้าจอไว้ จนกว่าจะมีการสแกนบาร์โค้ด
- แอปสไตล์คีออสก์ที่เปิดหน้าจอไว้อย่างต่อเนื่อง
- แอปการนำเสนอแบบเว็บที่เปิดหน้าจอไว้ ระหว่างการนำเสนอ
สถานะปัจจุบัน
ขั้นตอน | สถานะ |
---|---|
1. สร้างข้อความอธิบาย | ไม่มีข้อมูล |
2. สร้างฉบับร่างเริ่มต้นของข้อกำหนด | เสร็จสมบูรณ์ |
3. รวบรวมความคิดเห็นและทำซ้ำการออกแบบ | เสร็จสมบูรณ์ |
4. ช่วงทดลองใช้จากต้นทาง | เสร็จสมบูรณ์ |
5. เปิดตัว | เสร็จสมบูรณ์ |
การใช้ Screen Wake Lock API
ประเภท Wake Lock
ปัจจุบัน Screen Wake Lock API มี Wake Lock เพียงประเภทเดียวคือ screen
Wake Lock screen
รายการ
Wake Lock แบบ screen
จะป้องกันไม่ให้หน้าจอของอุปกรณ์ปิดอยู่เพื่อที่ผู้ใช้จะเห็นข้อมูลที่แสดงบนหน้าจอ
กำลังรับ Wake Lock หน้าจอ
หากต้องการขอ Wake Lock หน้าจอ คุณต้องเรียกใช้เมธอด navigator.wakeLock.request()
ที่แสดงผลออบเจ็กต์ WakeLockSentinel
คุณส่งเมธอดนี้เป็นประเภท Wake Lock ที่ต้องการเป็นพารามิเตอร์ได้ ซึ่งปัจจุบันจำกัดไว้ที่ 'screen'
เท่านั้น จึงไม่บังคับ
เบราว์เซอร์อาจปฏิเสธคำขอด้วยเหตุผลหลายประการ (เช่น เพราะระดับการชาร์จแบตเตอรี่ต่ำเกินไป) จึงเป็นวิธีที่ดีที่จะตัดสายในคำสั่ง try…catch
ข้อความของข้อยกเว้นจะมีรายละเอียดเพิ่มเติมในกรณีที่ดำเนินการไม่สำเร็จ
กำลังปล่อย Wake Lock หน้าจอ
คุณต้องมีวิธีปล่อย Wake Lock หน้าจอด้วย ซึ่งทำได้โดยการเรียกใช้เมธอด release()
ของออบเจ็กต์ WakeLockSentinel
หากไม่ได้จัดเก็บการอ้างอิงไปยัง WakeLockSentinel
ก็จะไม่มีวิธีปลดล็อกด้วยตนเอง แต่ระบบจะปล่อยการอ้างอิงเมื่อแท็บปัจจุบันไม่ปรากฏ
หากคุณต้องการปล่อย Wake Lock หน้าจอโดยอัตโนมัติหลังจากเวลาผ่านไประยะหนึ่งแล้ว คุณสามารถใช้ window.setTimeout()
เพื่อเรียก release()
ดังที่แสดงในตัวอย่างด้านล่าง
// The wake lock sentinel.
let wakeLock = null;
// Function that attempts to request a screen wake lock.
const requestWakeLock = async () => {
try {
wakeLock = await navigator.wakeLock.request();
wakeLock.addEventListener('release', () => {
console.log('Screen Wake Lock released:', wakeLock.released);
});
console.log('Screen Wake Lock released:', wakeLock.released);
} catch (err) {
console.error(`${err.name}, ${err.message}`);
}
};
// Request a screen wake lock…
await requestWakeLock();
// …and release it again after 5s.
window.setTimeout(() => {
wakeLock.release();
wakeLock = null;
}, 5000);
ออบเจ็กต์ WakeLockSentinel
มีพร็อพเพอร์ตี้ชื่อ released
ซึ่งระบุว่าประโยคความรู้สึกถูกปล่อยแล้วหรือไม่
ค่าในตอนนี้คือ false
และจะเปลี่ยนเป็น true
เมื่อมีการจัดส่งเหตุการณ์ "release"
แล้ว พร็อพเพอร์ตี้นี้ช่วยให้นักพัฒนาเว็บทราบเมื่อมีการปล่อยล็อก จึงไม่จําเป็นต้องติดตามเรื่องนี้ด้วยตนเอง
โดยพร้อมให้ใช้งานตั้งแต่ Chrome 87 เป็นต้นไป
วงจรการทำงานขณะล็อกหน้าจอ
เมื่อเล่นการสาธิต Wake Lock หน้าจอ คุณจะสังเกตเห็นว่า Wake Lock หน้าจอจะไวต่อระดับการเข้าถึงหน้าเว็บ ซึ่งหมายความว่า Wake Lock หน้าจอจะปล่อยโดยอัตโนมัติเมื่อคุณย่อแท็บหรือหน้าต่าง หรือเปลี่ยนออกจากแท็บหรือหน้าต่างที่ใช้งาน Wake Lock หน้าจออยู่
หากต้องการใช้ Wake Lock หน้าจออีกครั้ง ให้ฟังเหตุการณ์ visibilitychange
และขอ Wake Lock หน้าจอใหม่เมื่อเกิดขึ้น ดังนี้
const handleVisibilityChange = async () => {
if (wakeLock !== null && document.visibilityState === 'visible') {
await requestWakeLock();
}
};
document.addEventListener('visibilitychange', handleVisibilityChange);
ลดผลกระทบต่อทรัพยากรระบบ
คุณควรใช้ Wake Lock หน้าจอในแอปไหม วิธีการที่คุณใช้จะขึ้นอยู่กับความต้องการของแอป ไม่ว่าคุณจะใช้แนวทางที่น้อยที่สุดเท่าที่จะเป็นไปได้สำหรับแอปของคุณ เพื่อลดผลกระทบต่อทรัพยากรของระบบให้เหลือน้อยที่สุด
ก่อนเพิ่ม Wake Lock หน้าจอลงในแอป โปรดพิจารณาว่าคุณจะแก้ปัญหา Use Case ของคุณได้โดยใช้โซลูชันอื่นต่อไปนี้หรือไม่
- หากแอปทำการดาวน์โหลดเป็นระยะเวลานาน ให้พิจารณาใช้การดึงข้อมูลในเบื้องหลัง
- หากแอปซิงค์ข้อมูลจากเซิร์ฟเวอร์ภายนอก ให้ลองใช้การซิงค์ในเบื้องหลัง
ข้อมูลประชากร
ดูการสาธิตการล็อกหน้าจอเพื่อปิดหน้าจอและแหล่งข้อมูลการสาธิต สังเกตว่า Wake Lock หน้าจอจะปล่อยโดยอัตโนมัติเมื่อคุณสลับแท็บหรือแอป
ล็อกการปลุกหน้าจอในตัวจัดการงานของระบบปฏิบัติการ
คุณสามารถใช้ตัวจัดการงานของระบบปฏิบัติการเพื่อดูว่าแอปพลิเคชันป้องกันไม่ให้คอมพิวเตอร์เข้าสู่โหมดสลีปหรือไม่ วิดีโอด้านล่างแสดงตัวตรวจสอบกิจกรรมของ macOS ที่บ่งบอกว่า Chrome มี Wake Lock หน้าจอที่ใช้งานอยู่ซึ่งช่วยให้ระบบตื่นอยู่เสมอ
ความคิดเห็น
Web Platform Incubator Community Group (WICG) และทีม Chrome ต้องการทราบความคิดและประสบการณ์การใช้ Screen Wake Lock API ของคุณ
บอกให้เราทราบเกี่ยวกับการออกแบบ API
มีบางอย่างเกี่ยวกับ API ที่ทำงานไม่ได้ตามที่คาดไว้ไหม หรือมีวิธีหรือพร็อพเพอร์ตี้ที่ขาดหายไปที่คุณจำเป็นต้องใช้ในการนำแนวคิดของคุณไปปฏิบัติหรือไม่
- แจ้งปัญหาด้านข้อมูลจำเพาะในที่เก็บ API สำหรับการล็อกหน้าจอของ GitHub หรือแสดงความคิดเห็นเกี่ยวกับปัญหาที่มีอยู่
รายงานปัญหาเกี่ยวกับการใช้งาน
คุณพบข้อบกพร่องในการใช้งาน Chrome หรือไม่ หรือการใช้งานแตกต่างจาก ข้อกำหนดหรือไม่
- รายงานข้อบกพร่องที่ https://new.crbug.com อย่าลืมระบุรายละเอียดให้มากที่สุดเท่าที่จะทำได้ ระบุวิธีการง่ายๆ ในการสร้างข้อบกพร่องอีกครั้ง และตั้งค่าคอมโพเนนต์เป็น
Blink>WakeLock
Glitch เหมาะสำหรับ การแชร์คำขอซ้ำที่ง่ายและรวดเร็ว
แสดงการสนับสนุนสำหรับ API
คุณวางแผนที่จะใช้ Screen Wake API หรือไม่ การสนับสนุนสาธารณะของคุณช่วยให้ทีม Chrome จัดลำดับความสำคัญของฟีเจอร์และแสดงให้ผู้ให้บริการเบราว์เซอร์รายอื่นๆ เห็นว่าการสนับสนุนฟีเจอร์ดังกล่าวนั้นสำคัญเพียงใด
- แชร์แผนการใช้ API ในชุดข้อความของ WICG Discourse
- ส่งทวีตไปที่ @ChromiumDev โดยใช้แฮชแท็ก
#WakeLock
และแจ้งให้เราทราบว่าคุณใช้แฮชแท็กนี้ที่ไหนและอย่างไร
ลิงก์ที่มีประโยชน์
- ข้อกําหนดคําแนะนําของผู้สมัคร | ฉบับร่างของบรรณาธิการ
- การสาธิตการล็อกหน้าจอ | แหล่งข้อมูลสาธิตเกี่ยวกับการล็อกหน้าจอ
- ข้อบกพร่องในการติดตาม
- รายการ ChromeStatus.com
- การทดลองใช้ Wake Lock API
- คอมโพเนนต์การกะพริบ:
Blink>WakeLock
ข้อความแสดงการยอมรับ
รูปภาพหลักโดย Kate Stone Matheson ใน Unsplash เอื้อเฟื้อวิดีโอของ Henry Lim สำหรับผู้จัดการงาน