วงจรของแอป Chrome

รันไทม์และหน้าเหตุการณ์ของแอปทำหน้าที่จัดการวงจรของแอป รันไทม์ของแอปจะจัดการการติดตั้งแอป ควบคุมหน้าเหตุการณ์ และปิดแอปได้ทุกเมื่อ หน้าเหตุการณ์จะคอยฟังเหตุการณ์จากรันไทม์ของแอป รวมถึงจัดการสิ่งที่จะเปิดและวิธีเปิด

วิธีการทํางานของวงจร

รันไทม์ของแอปจะโหลดหน้ากิจกรรมจากเดสก์ท็อปของผู้ใช้ และระบบจะเรียกเหตุการณ์ 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.
});