รันไทม์และหน้าเหตุการณ์ของแอปทำหน้าที่จัดการวงจรของแอป รันไทม์ของแอปจะจัดการการติดตั้งแอป ควบคุมหน้าเหตุการณ์ และปิดแอปได้ทุกเมื่อ หน้าเหตุการณ์จะคอยฟังเหตุการณ์จากรันไทม์ของแอป รวมถึงจัดการสิ่งที่จะเปิดและวิธีเปิด
วิธีการทํางานของวงจร
รันไทม์ของแอปจะโหลดหน้ากิจกรรมจากเดสก์ท็อปของผู้ใช้ และระบบจะเรียกเหตุการณ์ onLaunch()
เหตุการณ์นี้จะบอกให้หน้าเหตุการณ์ทราบถึงหน้าต่างที่จะเปิดขึ้นมาและมิติข้อมูลของหน้าต่างนั้น
เมื่อหน้าเหตุการณ์ไม่มี JavaScript ที่ทำงานอยู่ ไม่มีการเรียกกลับที่รอดำเนินการ และไม่มีหน้าต่างที่เปิดอยู่ รันไทม์จะยกเลิกการโหลดหน้าเหตุการณ์และปิดแอป ก่อนที่จะยกเลิกการโหลดหน้าเหตุการณ์ ระบบจะเรียกเหตุการณ์ onSuspend()
ซึ่งจะช่วยให้หน้ากิจกรรมมีโอกาสทํางานทำความสะอาดง่ายๆ ก่อนที่แอปจะปิด
สร้างหน้าและกรอบเวลากิจกรรม
แอปทั้งหมดต้องมีหน้ากิจกรรม หน้านี้มีตรรกะระดับบนสุดของแอปพลิเคชันที่ไม่มี UI ของตนเองและมีหน้าที่สร้างหน้าต่างสําหรับหน้าแอปอื่นๆ ทั้งหมด
สร้างหน้ากิจกรรม
หากต้องการสร้างหน้ากิจกรรม ให้ใส่ช่อง "background" ในไฟล์ Manifest ของแอป และใส่ background.js
ในอาร์เรย์สคริปต์ สคริปต์ไลบรารีที่ใช้โดยหน้ากิจกรรมต้องเพิ่มลงในฟิลด์ "background" ก่อน
"background": {
"scripts": [
"foo.js",
"background.js"
]
}
หน้ากิจกรรมต้องมีฟังก์ชัน onLaunched()
ระบบจะเรียกใช้ฟังก์ชันนี้เมื่อเปิดแอปพลิเคชันด้วยวิธีใดก็ตามต่อไปนี้
chrome.app.runtime.onLaunched.addListener(function() {
// Tell your app what to launch and how.
});
สร้างหน้าต่าง
หน้ากิจกรรมอาจสร้างกรอบเวลาอย่างน้อย 1 กรอบตามดุลยพินิจ โดยค่าเริ่มต้น หน้าต่างเหล่านี้จะสร้างขึ้นด้วยการเชื่อมต่อสคริปต์กับหน้ากิจกรรม และหน้ากิจกรรมจะเขียนสคริปต์ได้โดยตรง
Windows ในแอป Chrome ไม่เชื่อมโยงกับหน้าต่างเบราว์เซอร์ Chrome ใดๆ โดยจะมีกรอบที่ไม่บังคับพร้อมแถบชื่อและตัวควบคุมขนาด รวมถึงรหัสหน้าต่างที่แนะนํา หน้าต่างที่ไม่มีรหัสจะไม่กู้คืนขนาดและตำแหน่งหลังจากการรีสตาร์ท
ต่อไปนี้เป็นตัวอย่างกรอบเวลาที่สร้างจาก background.js
chrome.app.runtime.onLaunched.addListener(function() {
chrome.app.window.create('main.html', {
id: 'MyWindowID',
bounds: {
width: 800,
height: 600,
left: 100,
top: 100
},
minWidth: 800,
minHeight: 600
});
});
รวมถึงข้อมูลการเปิดตัว
คุณอาจต้องจัดการข้อมูลการเปิดตัวในหน้ากิจกรรม ทั้งนี้ขึ้นอยู่กับวิธีเปิดตัวแอป โดยค่าเริ่มต้นจะไม่มีข้อมูลการเปิดแอปเมื่อตัวเปิดแอปเปิดแอป สำหรับแอปที่มีตัวแฮนเดิลไฟล์ คุณต้องจัดการพารามิเตอร์ launchData.items
เพื่ออนุญาตให้เปิดแอปด้วยไฟล์
รอรับเหตุการณ์รันไทม์ของแอป
รันไทม์ของแอปจะควบคุมการติดตั้ง การอัปเดต และการถอนการติดตั้งแอป คุณไม่จำเป็นต้องดำเนินการใดๆ เพื่อตั้งค่ารันไทม์ของแอป แต่หน้าเหตุการณ์จะตรวจจับเหตุการณ์ onInstalled()
เพื่อจัดเก็บการตั้งค่าในเครื่อง และเหตุการณ์ onSuspend()
เพื่อล้างข้อมูลง่ายๆ ก่อนยกเลิกการโหลดหน้ากิจกรรม
การจัดเก็บการตั้งค่าในเครื่อง
chrome.runtime.onInstalled()
จะเรียกใช้เมื่อติดตั้งแอปเป็นครั้งแรกหรือเมื่อมีการอัปเดตแอป เมื่อใดก็ตามที่มีการเรียกใช้ฟังก์ชันนี้ ระบบจะเรียกเหตุการณ์ onInstalled
หน้าเหตุการณ์สามารถรับฟังเหตุการณ์นี้และใช้ Storage API เพื่อจัดเก็บและอัปเดตการตั้งค่าในเครื่อง (ดูตัวเลือกพื้นที่เก็บข้อมูลด้วย)
chrome.runtime.onInstalled.addListener(function() {
chrome.storage.local.set(object items, function callback);
});
การป้องกันข้อมูลรั่วไหล
ผู้ใช้ถอนการติดตั้งแอปได้ทุกเมื่อ เมื่อถอนการติดตั้งแล้ว จะไม่มีโค้ดที่ทำงานอยู่หรือข้อมูลส่วนตัวเหลืออยู่ ซึ่งอาจทำให้ข้อมูลสูญหายเนื่องจากผู้ใช้อาจถอนการติดตั้งแอปที่มีข้อมูลที่แก้ไขในเครื่องซึ่งไม่ได้ซิงค์ คุณควรเก็บข้อมูลไว้เพื่อป้องกันการสูญหายของข้อมูล
อย่างน้อยที่สุด คุณควรจัดเก็บการตั้งค่าของผู้ใช้ไว้เพื่อให้ผู้ใช้ติดตั้งแอปของคุณอีกครั้ง ข้อมูลของพวกเขาจะยังคงสามารถนำไปใช้ซ้ำได้ เมื่อใช้ Storage API (storage.sync) คุณจะซิงค์ข้อมูลผู้ใช้กับการซิงค์ของ Chrome โดยอัตโนมัติได้
ล้างข้อมูลก่อนปิดแอป
รันไทม์ของแอปจะส่งเหตุการณ์ onSuspend()
ไปยังหน้าเหตุการณ์ก่อนที่จะยกเลิกการโหลด หน้าเหตุการณ์จะคอยฟังเหตุการณ์นี้ รวมถึงทํางานทำความสะอาดและบันทึกสถานะก่อนที่แอปจะปิด
เมื่อเหตุการณ์นี้เริ่มทํางาน รันไทม์ของแอปจะเริ่มกระบวนการปิดแอป หากแอปมีหน้าต่างที่เปิดอยู่ ระบบอาจรีสตาร์ทแอปในอนาคตผ่านเหตุการณ์ onRestarted
ในกรณีนี้ แอปควรบันทึกสถานะปัจจุบันลงในพื้นที่เก็บข้อมูลถาวรเพื่อให้รีสตาร์ทในสถานะเดิมได้หากได้รับเหตุการณ์ onRestarted
แอปมีเวลาเพียงไม่กี่วินาทีในการบันทึกสถานะ หลังจากนั้นระบบจะสิ้นสุดการทำงานของแอป ดังนั้นคุณควรบันทึกสถานะแอปเพิ่มเติมขณะที่แอปทํางานตามปกติ
หลังจากได้รับ onSuspend
ระบบจะไม่ส่งเหตุการณ์ไปยังแอปอีก เว้นแต่จะมีการยกเลิกการระงับด้วยเหตุผลบางประการ ในกรณีนี้ ระบบจะส่ง onSuspendCanceled
ไปยังแอปและจะไม่ยกเลิกการโหลดแอป
chrome.runtime.onSuspend.addListener(function() {
// Do some simple clean-up tasks.
});