ให้ตัวเลือกแก่ผู้ใช้

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

การค้นหาหน้าตัวเลือก

ผู้ใช้เข้าถึงหน้าตัวเลือกได้โดยลิงก์โดยตรง หรือคลิกขวาที่ไอคอนส่วนขยายในแถบเครื่องมือแล้วเลือกตัวเลือก นอกจากนี้ ผู้ใช้ยังสามารถไปที่หน้าตัวเลือกได้โดยเปิด chrome://extensions ก่อน จากนั้นค้นหาส่วนขยายที่ต้องการ แล้วคลิกรายละเอียด จากนั้นเลือกลิงก์ตัวเลือก

ลิงก์หน้าตัวเลือกในอินเทอร์เฟซผู้ใช้
ลิงก์ไปยังหน้าตัวเลือก
หน้าตัวเลือกเมนูตามบริบท
คลิกขวาที่ไอคอนของส่วนขยาย

เขียนหน้าตัวเลือก

ต่อไปนี้เป็นตัวอย่างของหน้าตัวเลือก

options.html:

<!DOCTYPE html>
<html>
  <head>
    <title>My Test Extension Options</title>
  </head>
  <body>
    <select id="color">
      <option value="red">red</option>
      <option value="green">green</option>
      <option value="blue">blue</option>
      <option value="yellow">yellow</option>
    </select>

    <label>
      <input type="checkbox" id="like" />
      I like colors.
    </label>

    <div id="status"></div>
    <button id="save">Save</button>

    <script src="options.js"></script>
  </body>
</html>

ด้านล่างคือตัวอย่างสคริปต์ตัวเลือก บันทึกไว้ในโฟลเดอร์เดียวกับ options.html การดําเนินการนี้จะบันทึกตัวเลือกที่ผู้ใช้ต้องการในอุปกรณ์ต่างๆ โดยใช้ storage.sync API

options.js:

// Saves options to chrome.storage
const saveOptions = () => {
  const color = document.getElementById('color').value;
  const likesColor = document.getElementById('like').checked;

  chrome.storage.sync.set(
    { favoriteColor: color, likesColor: likesColor },
    () => {
      // Update status to let user know options were saved.
      const status = document.getElementById('status');
      status.textContent = 'Options saved.';
      setTimeout(() => {
        status.textContent = '';
      }, 750);
    }
  );
};

// Restores select box and checkbox state using the preferences
// stored in chrome.storage.
const restoreOptions = () => {
  chrome.storage.sync.get(
    { favoriteColor: 'red', likesColor: true },
    (items) => {
      document.getElementById('color').value = items.favoriteColor;
      document.getElementById('like').checked = items.likesColor;
    }
  );
};

document.addEventListener('DOMContentLoaded', restoreOptions);
document.getElementById('save').addEventListener('click', saveOptions);

สุดท้าย ให้เพิ่มสิทธิ์ "storage" ในไฟล์Manifest ของส่วนขยาย ดังนี้

manifest.json:

{
  "name": "My extension",
  ...
  "permissions": [
    "storage"
  ]
  ...
}

ประกาศลักษณะการทำงานของหน้าตัวเลือก

หน้าตัวเลือกส่วนขยายมี 2 ประเภท ได้แก่ หน้าเต็มและหน้าที่ฝัง ประเภทของหน้าตัวเลือกจะกำหนดตามวิธีประกาศในไฟล์ Manifest

ตัวเลือกแบบเต็มหน้า

หน้าตัวเลือกแบบเต็มหน้าจะแสดงในแท็บใหม่ ลงทะเบียนไฟล์ HTML ตัวเลือกในไฟล์ Manifest ในช่อง "options_page"

manifest.json:

{
  "name": "My extension",
  ...
  "options_page": "options.html",
  ...
}
ตัวเลือกแบบเต็มหน้า
ตัวเลือกแบบเต็มหน้าในแท็บใหม่

ตัวเลือกที่ฝัง

หน้าตัวเลือกที่ฝังช่วยให้ผู้ใช้ปรับตัวเลือกส่วนขยายได้โดยไม่ต้องออกจากหน้าการจัดการส่วนขยายในกล่องแบบฝัง หากต้องการประกาศตัวเลือกที่ฝัง ให้ลงทะเบียนไฟล์ HTML ใต้ช่อง "options_ui" ในไฟล์ Manifest ของส่วนขยาย โดยตั้งคีย์ "open_in_tab" เป็น false

manifest.json:

{
  "name": "My extension",
  ...
  "options_ui": {
    "page": "options.html",
    "open_in_tab": false
  },
  ...
}
ตัวเลือกที่ฝัง
ตัวเลือกที่ฝัง
page (สตริง)
ระบุเส้นทางไปยังหน้าตัวเลือก โดยสัมพันธ์กับรูทของส่วนขยาย
open_in_tab (boolean)
ระบุว่าหน้าตัวเลือกของส่วนขยายจะเปิดในแท็บใหม่หรือไม่ หากตั้งค่าเป็น false หน้าตัวเลือกของส่วนขยายจะฝังอยู่ใน chrome://extensions แทนที่จะเปิดในแท็บใหม่

พิจารณาความแตกต่าง

หน้าตัวเลือกที่ฝังอยู่ภายใน chrome://extensions มีลักษณะการทำงานที่ต่างจากหน้าตัวเลือกในแท็บ

ลิงก์ไปยังหน้าตัวเลือก

ส่วนขยายลิงก์ไปยังหน้าตัวเลือกได้โดยตรงด้วยการเรียกใช้ chrome.runtime.openOptionsPage() เช่น สามารถเพิ่มในป๊อปอัปได้

popup.html:

<button id="go-to-options">Go to options</button>
<script src="popup.js"></script>

popup.js:

document.querySelector('#go-to-options').addEventListener('click', function() {
  if (chrome.runtime.openOptionsPage) {
    chrome.runtime.openOptionsPage();
  } else {
    window.open(chrome.runtime.getURL('options.html'));
  }
});

API แท็บ

เนื่องจากโค้ดตัวเลือกแบบฝังไม่ได้โฮสต์ในแท็บ จึงไม่สามารถใช้ Tabs API ได้ ใช้ runtime.connect() และ runtime.sendMessage() แทน หากหน้าตัวเลือกไม่จำเป็นต้องดำเนินการกับแท็บที่มี

API การรับส่งข้อความ

หากหน้าตัวเลือกของส่วนขยายส่งข้อความโดยใช้ runtime.connect() หรือ runtime.sendMessage() ระบบจะไม่ตั้งค่าแท็บของผู้ส่ง และ URL ของผู้ส่งจะเป็น URL ของหน้าตัวเลือก

ขนาด

ตัวเลือกแบบฝังควรกำหนดขนาดของตนเองโดยอัตโนมัติตามเนื้อหาของหน้า อย่างไรก็ตาม กล่องแบบฝังอาจไม่เหมาะกับเนื้อหาบางประเภท ปัญหานี้พบบ่อยที่สุดสำหรับหน้าตัวเลือก ที่ปรับรูปร่างเนื้อหาตามขนาดหน้าต่าง

หากเกิดปัญหา ให้ระบุขนาดขั้นต่ำที่คงที่สำหรับหน้าตัวเลือกเพื่อให้แน่ใจว่าหน้าที่ฝังจะพบขนาดที่เหมาะสม