āĻŸā§āϝāĻžāĻŦ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧁āύ

āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻĨāĻŽ āĻŸā§āϝāĻžāĻŦ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤

āĻ“āĻ­āĻžāϰāĻ­āĻŋāω

āĻāχ āϟāĻŋāωāĻŸā§‹āϰāĻŋāϝāĻŧāĻžāϞāϟāĻŋ āφāĻĒāύāĻžāϰ Chrome āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻāĻŦāĻ‚ Chrome āĻ“āϝāĻŧ⧇āĻŦ āĻ¸ā§āĻŸā§‹āϰ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻŸā§āϝāĻžāĻŦāϗ⧁āϞāĻŋāϕ⧇ āϏāĻ‚āĻ—āĻ āĻŋāϤ āĻ•āϰāϤ⧇ āĻāĻ•āϟāĻŋ āĻŸā§āϝāĻžāĻŦ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰ⧇⧎

āĻŸā§āϝāĻžāĻŦ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻĒāĻĒāφāĻĒ
āĻŸā§āϝāĻžāĻŦ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ

āĻāχ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻžāϤ⧇, āφāĻŽāϰāĻž āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤāϗ⧁āϞāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϤāĻž āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāϤ⧇ āϝāĻžāĻšā§āĻ›āĻŋ:

  • āĻ…ā§āϝāĻžāĻ•āĻļāύ API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻĒāĻĒāφāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤
  • Tabs API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŸā§āϝāĻžāĻŦ⧇āϰ āϜāĻ¨ā§āϝ āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀āĨ¤
  • āϏāĻ‚āϕ⧀āĻ°ā§āĻŖ āĻšā§‹āĻ¸ā§āϟ āĻ…āύ⧁āĻŽāϤāĻŋāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ—ā§‹āĻĒāύ⧀āϝāĻŧāϤāĻž āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύāĨ¤
  • āĻŸā§āϝāĻžāĻŦ⧇āϰ āĻĢā§‹āĻ•āĻžāϏ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύāĨ¤
  • āĻāĻ•āχ āωāχāĻ¨ā§āĻĄā§‹āϤ⧇ āĻŸā§āϝāĻžāĻŦāϗ⧁āϞāĻŋ āϏāϰāĻžāύ āĻāĻŦāĻ‚ āϤāĻžāĻĻ⧇āϰ āĻ—ā§‹āĻˇā§āĻ ā§€āĻŦāĻĻā§āϧ āĻ•āϰ⧁āύāĨ¤
  • TabGroups API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŸā§āϝāĻžāĻŦ āĻ—ā§āϰ⧁āĻĒ⧇āϰ āύāĻžāĻŽ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύāĨ¤

āφāĻĒāύāĻŋ āĻļ⧁āϰ⧁ āĻ•āϰāĻžāϰ āφāϗ⧇

āĻāχ āĻ—āĻžāχāĻĄāϟāĻŋ āϧāϰ⧇ āύ⧇āϝāĻŧ āϝ⧇ āφāĻĒāύāĻžāϰ āĻ•āĻžāϛ⧇ āĻŽā§ŒāϞāĻŋāĻ• āĻ“āϝāĻŧ⧇āĻŦ āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āϟ āĻ…āĻ­āĻŋāĻœā§āĻžāϤāĻž āφāϛ⧇āĨ¤ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āϟ āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻĢā§āϞ⧋ āĻĒāϰāĻŋāϚāĻŋāϤāĻŋāϰ āϜāĻ¨ā§āϝ āφāĻŽāϰāĻž āĻšā§āϝāĻžāϞ⧋ āĻ“āϝāĻŧāĻžāĻ°ā§āĻ˛ā§āĻĄ āĻšā§‡āĻ• āĻ•āϰāĻžāϰ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāχāĨ¤

āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ

āĻļ⧁āϰ⧁ āĻ•āϰāϤ⧇, āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ⧇āϰ āĻĢāĻžāχāϞāϗ⧁āϞāĻŋāϕ⧇ āϧāϰ⧇ āϰāĻžāĻ–āϤ⧇ tabs-manager āύāĻžāĻŽā§‡ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰ⧇āύ, āφāĻĒāύāĻŋ GitHub- āĻ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āϏ⧋āĻ°ā§āϏ āϕ⧋āĻĄ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āϧāĻžāĻĒ 1: āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻĄā§‡āϟāĻž āĻāĻŦāĻ‚ āφāχāĻ•āύ āϝ⧋āĻ— āĻ•āϰ⧁āύ

manifest.json āύāĻžāĻŽā§‡ āĻāĻ•āϟāĻŋ āĻĢāĻžāχāϞ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϕ⧋āĻĄ āϝ⧋āĻ— āĻ•āϰ⧁āύ:

{
  "manifest_version": 3,
  "name": "Tab Manager for Chrome Dev Docs",
  "version": "1.0",
  "icons": {
    "16": "images/icon-16.png",
    "32": "images/icon-32.png",
    "48": "images/icon-48.png",
    "128": "images/icon-128.png"
  }
}

āĻāχ āĻŽā§āϝāĻžāύāĻŋāĻĢ⧇āĻ¸ā§āϟ āϕ⧀āϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύāϤ⧇, āĻĒāĻĄāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ āϟāĻŋāωāĻŸā§‹āϰāĻŋāϝāĻŧāĻžāϞāϟāĻŋ āĻĻ⧇āϖ⧁āύ āϝāĻž āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ⧇āϰ āĻŽā§‡āϟāĻžāĻĄā§‡āϟāĻž āĻāĻŦāĻ‚ āφāχāĻ•āύāϗ⧁āϞāĻŋāϕ⧇ āφāϰāĻ“ āĻŦāĻŋāĻļāĻĻ⧇ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰ⧇⧎

āĻāĻ•āϟāĻŋ images āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āϤāĻžāϰāĻĒāϰ āĻāϤ⧇ āφāχāĻ•āύ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰ⧁āύ āĨ¤

āϧāĻžāĻĒ 2: āĻĒāĻĒāφāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻ¸ā§āϟāĻžāχāϞ āĻ•āϰ⧁āύ

āĻ…ā§āϝāĻžāĻ•āĻļāύ API āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻ…ā§āϝāĻžāĻ•āĻļāύ (āϟ⧁āϞāĻŦāĻžāϰ āφāχāĻ•āύ) āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰ⧇āĨ¤ āϝāĻ–āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻ…ā§āϝāĻžāĻ•āĻļāύ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧇āύ, āϤāĻ–āύ āĻāϟāĻŋ āĻšāϝāĻŧ āĻ•āĻŋāϛ⧁ āϕ⧋āĻĄ āϚāĻžāϞāĻžāĻŦ⧇ āĻŦāĻž āĻāĻ•āϟāĻŋ āĻĒāĻĒāφāĻĒ āϖ⧁āϞāĻŦ⧇, āϝ⧇āĻŽāύ āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āĨ¤ manifest.json āĻ āĻĒāĻĒāφāĻĒ āĻ˜ā§‹āώāĻŖāĻž āĻ•āϰ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ:

{
  "action": {
    "default_popup": "popup.html"
  }
}

āĻāĻ•āϟāĻŋ āĻĒāĻĒāφāĻĒ āĻāĻ•āϟāĻŋ āĻŦā§āϝāϤāĻŋāĻ•ā§āϰāĻŽ āϏāĻš āĻāĻ•āϟāĻŋ āĻ“āϝāĻŧ⧇āĻŦ āĻĒ⧃āĻˇā§āĻ āĻžāϰ āĻ…āύ⧁āϰ⧂āĻĒ: āĻāϟāĻŋ āχāύāϞāĻžāχāύ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰ⧇ āύāĻžāĨ¤ āĻāĻ•āϟāĻŋ popup.html āĻĢāĻžāχāϞ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϕ⧋āĻĄ āϝ⧋āĻ— āĻ•āϰ⧁āύ:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="./popup.css" />
  </head>
  <body>
    <template id="li_template">
      <li>
        <a>
          <h3 class="title">Tab Title</h3>
          <p class="pathname">Tab Pathname</p>
        </a>
      </li>
    </template>

    <h1>Google Dev Docs</h1>
    <button>Group Tabs</button>
    <ul></ul>

    <script src="./popup.js" type="module"></script>
  </body>
</html>

āĻāϰ āĻĒāϰ⧇, āφāĻĒāύāĻŋ āĻĒāĻĒāφāĻĒ āĻ¸ā§āϟāĻžāχāϞ āĻ•āϰāĻŦ⧇āύāĨ¤ āĻāĻ•āϟāĻŋ popup.css āĻĢāĻžāχāϞ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϕ⧋āĻĄ āϝ⧋āĻ— āĻ•āϰ⧁āύ:

body {
  width: 20rem;
}

ul {
  list-style-type: none;
  padding-inline-start: 0;
  margin: 1rem 0;
}

li {
  padding: 0.25rem;
}
li:nth-child(odd) {
  background: #80808030;
}
li:nth-child(even) {
  background: #ffffff;
}

h3,
p {
  margin: 0;
}

āϧāĻžāĻĒ 3: āĻŸā§āϝāĻžāĻŦāϗ⧁āϞāĻŋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧁āύ

āĻŸā§āϝāĻžāĻŦāϏ āĻāĻĒāĻŋāφāχ āĻāĻ•āϟāĻŋ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύāϕ⧇ āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇ āĻŸā§āϝāĻžāĻŦ āϤ⧈āϰāĻŋ, āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ, āϏāĻ‚āĻļā§‹āϧāύ āĻāĻŦāĻ‚ āĻĒ⧁āύāĻ°ā§āĻŦāĻŋāĻ¨ā§āϝāĻžāϏ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āϝāĻŧāĨ¤

āĻ…āύ⧁āĻŽāϤāĻŋāϰ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰ⧁āύ

āĻŸā§āϝāĻžāĻŦ āĻāĻĒāĻŋāφāχ-āĻāϰ āĻ…āύ⧇āĻ• āĻĒāĻĻā§āϧāϤāĻŋ āϕ⧋āύ⧋ āĻ…āύ⧁āĻŽāϤāĻŋāϰ āĻ…āύ⧁āϰ⧋āϧ āĻ›āĻžāĻĄāĻŧāĻžāχ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āφāĻŽāĻžāĻĻ⧇āϰ āĻŸā§āϝāĻžāĻŦāϗ⧁āϞāĻŋāϰ title āĻāĻŦāĻ‚ URL āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇; āĻāχ āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ. āφāĻŽāϰāĻž "tabs" āĻ…āύ⧁āĻŽāϤāĻŋāϰ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ, āϤāĻŦ⧇ āĻāϟāĻŋ āϏāĻŽāĻ¸ā§āϤ āĻŸā§āϝāĻžāĻŦ⧇āϰ āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϗ⧁āϞāĻŋāϤ⧇ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻĻ⧇āĻŦ⧇⧎ āϝ⧇āĻšā§‡āϤ⧁ āφāĻŽāϰāĻž āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻžāχāĻŸā§‡āϰ āĻŸā§āϝāĻžāĻŦ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻ›āĻŋ, āϤāĻžāχ āφāĻŽāϰāĻž āϏāĻ‚āϕ⧀āĻ°ā§āĻŖ āĻšā§‹āĻ¸ā§āϟ āĻ…āύ⧁āĻŽāϤāĻŋāϰ āϜāĻ¨ā§āϝ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāĻŦāĨ¤

āϏāĻ‚āϕ⧀āĻ°ā§āĻŖ āĻšā§‹āĻ¸ā§āĻŸā§‡āϰ āĻ…āύ⧁āĻŽāϤāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻžāχāϟāϗ⧁āϞāĻŋāϤ⧇ āωāĻšā§āϚāϤāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ—ā§‹āĻĒāύ⧀āϝāĻŧāϤāĻž āϰāĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧ⧎ āĻāϟāĻŋ title , āĻāĻŦāĻ‚ URL āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϗ⧁āϞāĻŋāϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ•ā§āώāĻŽāϤāĻžāϗ⧁āϞāĻŋāϤ⧇ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŽāĻžā§āϜ⧁āϰ āĻ•āϰāĻŦ⧇⧎ manifest.json āĻĢāĻžāχāϞ⧇ āĻšāĻžāχāϞāĻžāχāϟ āĻ•āϰāĻž āϕ⧋āĻĄ āϝ⧋āĻ— āĻ•āϰ⧁āύ:

{
  "host_permissions": [
    "https://developer.chrome.com/*"
  ]
}

💡 āĻŸā§āϝāĻžāĻŦ āĻ…āύ⧁āĻŽāϤāĻŋ āĻāĻŦāĻ‚ āĻšā§‹āĻ¸ā§āϟ āĻ…āύ⧁āĻŽāϤāĻŋ āĻŽāĻ§ā§āϝ⧇ āĻĒā§āϰāϧāĻžāύ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻ•āĻŋ āĻ•āĻŋ?

"tabs" āĻ…āύ⧁āĻŽāϤāĻŋ āĻāĻŦāĻ‚ āĻšā§‹āĻ¸ā§āϟ āĻ…āύ⧁āĻŽāϤāĻŋ āωāĻ­āϝāĻŧ⧇āϰāχ āĻ¤ā§āϰ⧁āϟāĻŋ āϰāϝāĻŧ⧇āϛ⧇āĨ¤

"tabs" āĻ…āύ⧁āĻŽāϤāĻŋ āĻāĻ•āϟāĻŋ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύāϕ⧇ āϏāĻŽāĻ¸ā§āϤ āĻŸā§āϝāĻžāĻŦ⧇ āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻĄā§‡āϟāĻž āĻĒāĻĄāĻŧāĻžāϰ āĻ•ā§āώāĻŽāϤāĻž āĻĻ⧇āϝāĻŧ⧎ āϏāĻŽāϝāĻŧ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇, āĻāχ āϤāĻĨā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻŦā§āϰāĻžāωāϜāĻŋāĻ‚ āχāϤāĻŋāĻšāĻžāϏ āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϝ⧇āĻŽāύ, āφāĻĒāύāĻŋ āĻāχ āĻ…āύ⧁āĻŽāϤāĻŋāϰ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāϞ⧇ Chrome āχāύāĻ¸ā§āϟāϞ⧇āϰ āϏāĻŽāϝāĻŧ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϏāϤāĻ°ā§āĻ•āϤāĻž āĻŦāĻžāĻ°ā§āϤāĻž āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ āĻ•āϰāĻŦ⧇:

āĻŸā§āϝāĻžāĻŦ āĻ…āύ⧁āĻŽāϤāĻŋ āϏāϤāĻ°ā§āĻ•āϤāĻž āĻĄāĻžāϝāĻŧāĻžāϞāĻ—

āĻšā§‹āĻ¸ā§āĻŸā§‡āϰ āĻ…āύ⧁āĻŽāϤāĻŋāϗ⧁āϞāĻŋ āĻāĻ•āϟāĻŋ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύāϕ⧇ āĻāĻ•āϟāĻŋ āĻŽā§āϝāĻžāϚāĻŋāĻ‚ āĻŸā§āϝāĻžāĻŦ⧇āϰ āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϗ⧁āϞāĻŋ āĻĒāĻĄāĻŧāϤ⧇ āĻāĻŦāĻ‚ āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āϝāĻŧ āĻāĻŦāĻ‚ āĻāχ āĻŸā§āϝāĻžāĻŦ⧇ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟāϗ⧁āϞāĻŋ āχāύāĻœā§‡āĻ•ā§āϟ āĻ•āϰ⧇⧎ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰāĻž āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϏāϤāĻ°ā§āĻ•āϤāĻž āĻŦāĻžāĻ°ā§āϤāĻž āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦ⧇āύ:

āĻšā§‹āĻ¸ā§āϟ āĻ…āύ⧁āĻŽāϤāĻŋ āϏāϤāĻ°ā§āĻ•āϤāĻž āĻĄāĻžāϝāĻŧāĻžāϞāĻ—

āĻāχ āϏāϤāĻ°ā§āĻ•āϤāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϜāĻ¨ā§āϝ āωāĻĻā§āĻŦ⧇āĻ—āϜāύāĻ• āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āĻ…āύāĻŦā§‹āĻ°ā§āĻĄāĻŋāĻ‚ āĻ…āĻ­āĻŋāĻœā§āĻžāϤāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻŽāϰāĻž āϐāĻšā§āĻ›āĻŋāĻ• āĻ…āύ⧁āĻŽāϤāĻŋ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻžāϰ āϏ⧁āĻĒāĻžāϰāĻŋāĻļ āĻ•āϰāĻŋ⧎

āĻŸā§āϝāĻžāĻŦ āϜāĻŋāĻœā§āĻžāĻžāϏāĻž

āφāĻĒāύāĻŋ tabs.query() āĻĒāĻĻā§āϧāϤāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ URL āĻĨ⧇āϕ⧇ āĻŸā§āϝāĻžāĻŦāϗ⧁āϞāĻŋ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻāĻ•āϟāĻŋ popup.js āĻĢāĻžāχāϞ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϕ⧋āĻĄ āϝ⧋āĻ— āĻ•āϰ⧁āύ:

const tabs = await chrome.tabs.query({
  url: [
    "https://developer.chrome.com/docs/webstore/*",
    "https://developer.chrome.com/docs/extensions/*",
  ]
});

💡 āφāĻŽāĻŋ āĻ•āĻŋ āϏāϰāĻžāϏāϰāĻŋ āĻĒāĻĒāφāĻĒ⧇ Chrome API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ?

āĻāĻ•āϟāĻŋ āĻĒāĻĒāφāĻĒ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻĒ⧃āĻˇā§āĻ āĻžāϗ⧁āϞāĻŋ āϝ⧇ āϕ⧋āύāĻ“ āĻ•ā§āϰ⧋āĻŽ āĻāĻĒāĻŋāφāχāϕ⧇ āĻ•āϞ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āĻ•āĻžāϰāĻŖ āϏ⧇āϗ⧁āϞāĻŋ āĻ•ā§āϰ⧋āĻŽ āĻ¸ā§āĻ•āĻŋāĻŽāĻž āĻĨ⧇āϕ⧇ āĻĒāϰāĻŋāĻŦ⧇āĻļāĻŋāϤ āĻšāϝāĻŧ⧎ āϝ⧇āĻŽāύ chrome-extension://EXTENSION_ID/popup.html āĨ¤

āĻāĻ•āϟāĻŋ āĻŸā§āϝāĻžāĻŦ⧇ āĻĢā§‹āĻ•āĻžāϏ āĻ•āϰ⧁āύ

āĻĒā§āϰāĻĨāĻŽāϤ, āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύāϟāĻŋ āĻŸā§āϝāĻžāĻŦ⧇āϰ āύāĻžāĻŽāϗ⧁āϞāĻŋ (āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ HTML āĻĒ⧃āĻˇā§āĻ āĻžāϗ⧁āϞāĻŋāϰ āĻļāĻŋāϰ⧋āύāĻžāĻŽ) āĻŦāĻ°ā§āĻŖāĻžāύ⧁āĻ•ā§āϰāĻŽāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āϏāĻžāϜāĻžāϤ⧇ āĻšāĻŦ⧇⧎ āϤāĻžāϰāĻĒāϰ, āϝāĻ–āύ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻž āφāχāĻŸā§‡āĻŽ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰāĻž āĻšāϝāĻŧ, āĻāϟāĻŋ tabs.update() āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏ⧇āχ āĻŸā§āϝāĻžāĻŦ⧇ āĻĢā§‹āĻ•āĻžāϏ āĻ•āϰāĻŦ⧇ āĻāĻŦāĻ‚ windows.update() āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āωāχāĻ¨ā§āĻĄā§‹āϟāĻŋāϕ⧇ āϏāĻžāĻŽāύ⧇ āύāĻŋāϝāĻŧ⧇ āφāϏāĻŦ⧇āĨ¤ popup.js āĻĢāĻžāχāϞ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϕ⧋āĻĄ āϝ⧋āĻ— āĻ•āϰ⧁āύ:

...
const collator = new Intl.Collator();
tabs.sort((a, b) => collator.compare(a.title, b.title));

const template = document.getElementById("li_template");
const elements = new Set();
for (const tab of tabs) {
  const element = template.content.firstElementChild.cloneNode(true);

  const title = tab.title.split("-")[0].trim();
  const pathname = new URL(tab.url).pathname.slice("/docs".length);

  element.querySelector(".title").textContent = title;
  element.querySelector(".pathname").textContent = pathname;
  element.querySelector("a").addEventListener("click", async () => {
    // need to focus window as well as the active tab
    await chrome.tabs.update(tab.id, { active: true });
    await chrome.windows.update(tab.windowId, { focused: true });
  });

  elements.add(element);
}
document.querySelector("ul").append(...elements);
...

💡 āĻāχ āϕ⧋āĻĄā§‡ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āφāĻ•āĻ°ā§āώāĻŖā§€āϝāĻŧ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ

  • Collator āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĒāĻ›āĻ¨ā§āĻĻ⧇āϰ āĻ­āĻžāώāĻž āĻ…āύ⧁āϏāĻžāϰ⧇ āĻŸā§āϝāĻžāĻŦ āĻ…ā§āϝāĻžāϰ⧇ āϏāĻžāϜāĻžāϤ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧāĨ¤
  • āĻĒā§āϰāϤāĻŋāϟāĻŋ āφāχāĻŸā§‡āĻŽ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ document.createElement() āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āĻ•ā§āϞ⧋āύ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŽāύ āĻāĻ•āϟāĻŋ HTML āωāĻĒāĻžāĻĻāĻžāύāϕ⧇ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻŸā§āϝāĻžāĻ— āĨ¤
  • āχāωāφāϰāĻāϞ āĻ•āύāĻ¸ā§āĻŸā§āϰāĻžāĻ•ā§āϟāϰ āχāωāφāϰāĻāϞ āϤ⧈āϰāĻŋ āĻāĻŦāĻ‚ āĻĒāĻžāĻ°ā§āϏ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧāĨ¤
  • āĻ¸ā§āĻĒā§āϰ⧇āĻĄ āϏāĻŋāύāĻŸā§āϝāĻžāĻ•ā§āϏ append() āĻ•āϞ⧇ āωāĻĒāĻžāĻĻāĻžāύ⧇āϰ āϏ⧇āϟāϕ⧇ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧāĨ¤

āĻŸā§āϝāĻžāĻŦ āĻ—ā§āϰ⧁āĻĒ āĻ•āϰ⧁āύ

TabGroups API āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύāϕ⧇ āĻ—ā§āϰ⧁āĻĒ⧇āϰ āύāĻžāĻŽ āĻĻāĻŋāϤ⧇ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻĒāϟāĻ­ā§‚āĻŽāĻŋāϰ āϰāĻ™ āĻŦ⧇āϛ⧇ āύ⧇āĻ“āϝāĻŧāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āϝāĻŧāĨ¤ āĻšāĻžāχāϞāĻžāχāϟ āĻ•āϰāĻž āϕ⧋āĻĄ āϝ⧋āĻ— āĻ•āϰ⧇ āĻŽā§āϝāĻžāύāĻŋāĻĢ⧇āĻ¸ā§āĻŸā§‡ "tabGroups" āĻ…āύ⧁āĻŽāϤāĻŋ āϝ⧋āĻ— āĻ•āϰ⧁āύ:

{
  "permissions": [
    "tabGroups"
  ]
}

popup.js āĻ, āĻāĻ•āϟāĻŋ āĻŦā§‹āϤāĻžāĻŽ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϕ⧋āĻĄāϟāĻŋ āϝ⧋āĻ— āĻ•āϰ⧁āύ āϝāĻž tabs.group() āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏāĻŽāĻ¸ā§āϤ āĻŸā§āϝāĻžāĻŦāϕ⧇ āĻ—ā§‹āĻˇā§āĻ ā§€āĻŦāĻĻā§āϧ āĻ•āϰāĻŦ⧇ āĻāĻŦāĻ‚ āϤāĻžāĻĻ⧇āϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āωāχāĻ¨ā§āĻĄā§‹āϤ⧇ āύāĻŋāϝāĻŧ⧇ āϝāĻžāĻŦ⧇āĨ¤

const button = document.querySelector("button");
button.addEventListener("click", async () => {
  const tabIds = tabs.map(({ id }) => id);
  if (tabIds.length) {
    const group = await chrome.tabs.group({ tabIds });
    await chrome.tabGroups.update(group, { title: "DOCS" });
  }
});

āĻāϟāĻŋ āĻ•āĻžāϜ āĻ•āϰ⧇ āϤāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύ

āϝāĻžāϚāĻžāχ āĻ•āϰ⧁āύ āϝ⧇ āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻĢāĻžāχāϞ āĻ•āĻžāĻ āĻžāĻŽā§‹ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ āĻ—āĻžāϛ⧇āϰ āϏāĻžāĻĨ⧇ āĻŽā§‡āϞ⧇:

āĻŸā§āϝāĻžāĻŦ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ⧇āϰ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁: manifest.json, popup.js, popup.css, popup.html āĻāĻŦāĻ‚ āĻ›āĻŦāĻŋ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰāĨ¤

āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧāĻ­āĻžāĻŦ⧇ āφāĻĒāύāĻžāϰ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āϞ⧋āĻĄ āĻ•āϰ⧁āύ

āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰ āĻŽā§‹āĻĄā§‡ āĻāĻ•āϟāĻŋ āφāύāĻĒā§āϝāĻžāĻ• āĻ•āϰāĻž āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āϞ⧋āĻĄ āĻ•āϰāϤ⧇, Hello World- āĻāϰ āϧāĻžāĻĒāϗ⧁āϞāĻŋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧁āύ⧎

āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻĒ⧇āϜ āϖ⧁āϞ⧁āύ

āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āωāχāĻ¨ā§āĻĄā§‹āϤ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āύāĻĨāĻŋ āϖ⧁āϞ⧁āύ:

āĻĒāĻĒāφāĻĒ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύ. āĻāϟāĻŋ āĻāχ āĻŽāϤ āĻšāĻ“āϝāĻŧāĻž āωāϚāĻŋāϤ:

āĻŸā§āϝāĻžāĻŦ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻĒāĻĒāφāĻĒ
āĻŸā§āϝāĻžāĻŦ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻĒāĻĒāφāĻĒ

"āĻ—ā§āϰ⧁āĻĒ āĻŸā§āϝāĻžāĻŦ" āĻŦā§‹āϤāĻžāĻŽā§‡ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύāĨ¤ āĻāϟāĻŋ āĻāχ āĻŽāϤ āĻšāĻ“āϝāĻŧāĻž āωāϚāĻŋāϤ:

āĻŸā§āϝāĻžāĻŦ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻ—ā§āϰ⧁āĻĒ āĻ•āϰāĻž āĻŸā§āϝāĻžāĻŦ
āĻŸā§āϝāĻžāĻŦ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ—ā§‹āĻˇā§āĻ ā§€āĻŦāĻĻā§āϧ āĻŸā§āϝāĻžāĻŦ

đŸŽ¯ āϏāĻŽā§āĻ­āĻžāĻŦā§āϝ āωāĻ¨ā§āύāϤāĻŋ

āφāĻĒāύāĻŋ āφāϜ āϝāĻž āĻļāĻŋāϖ⧇āϛ⧇āύ āϤāĻžāϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇, āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϝ⧇āϕ⧋āύāϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧁āύ:

  • āĻĒāĻĒāφāĻĒ āĻ¸ā§āϟāĻžāχāϞ āĻļā§€āϟ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāχāϜ āĻ•āϰ⧁āύāĨ¤
  • āĻŸā§āϝāĻžāĻŦ āĻ—ā§āϰ⧁āĻĒ⧇āϰ āϰāĻ™ āĻāĻŦāĻ‚ āĻļāĻŋāϰ⧋āύāĻžāĻŽ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύāĨ¤
  • āĻ…āĻ¨ā§āϝ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āϏāĻžāχāĻŸā§‡āϰ āĻŸā§āϝāĻžāĻŦ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧁āύāĨ¤
  • āĻ—ā§‹āĻˇā§āĻ ā§€āĻŦāĻĻā§āϧ āĻŸā§āϝāĻžāĻŦāϗ⧁āϞāĻŋāϕ⧇ āĻ—ā§‹āĻˇā§āĻ ā§€āĻŦāĻĻā§āϧ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϏāĻŽāĻ°ā§āĻĨāύ āϝ⧋āĻ— āĻ•āϰ⧁āύāĨ¤

āύāĻŋāĻ°ā§āĻŽāĻžāĻŖ āϰāĻžāϖ⧁āύ!

āĻāχ āϟāĻŋāωāĻŸā§‹āϰāĻŋāϝāĻŧāĻžāϞāϟāĻŋ āĻļ⧇āώ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻ…āĻ­āĻŋāύāĻ¨ā§āĻĻāύ 🎉āĨ¤ āĻāχ āϏāĻŋāϰāĻŋāĻœā§‡āϰ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āϟāĻŋāωāĻŸā§‹āϰāĻŋāϝāĻŧāĻžāϞāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āϰ⧇ āφāĻĒāύāĻžāϰ āĻĻāĻ•ā§āώāϤāĻž āĻŦāĻŋāĻ•āĻžāĻļ āϚāĻžāϞāĻŋāϝāĻŧ⧇ āϝāĻžāύ:

āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āϝāĻž āĻļāĻŋāĻ–āĻŦ⧇āύ
āĻĒāĻĄāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒ⧃āĻˇā§āĻ āĻžāϝāĻŧ āĻāĻ•āϟāĻŋ āωāĻĒāĻžāĻĻāĻžāύ āϏāĻ¨ā§āύāĻŋāĻŦ⧇āĻļ āĻ•āϰāĻžāύāĨ¤
āĻĢā§‹āĻ•āĻžāϏ āĻŽā§‹āĻĄ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻ…ā§āϝāĻžāĻ•āĻļāύ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰāĻžāϰ āĻĒāϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻĒ⧃āĻˇā§āĻ āĻžāϝāĻŧ āϕ⧋āĻĄ āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝāĨ¤

āĻ…āĻ¨ā§āĻŦ⧇āώāĻŖ āϚāĻžāϞāĻŋāϝāĻŧ⧇ āϝāĻžāύ

āφāĻŽāϰāĻž āφāĻļāĻž āĻ•āϰāĻŋ āφāĻĒāύāĻŋ āĻāχ āĻ•ā§āϰ⧋āĻŽ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύāϟāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āωāĻĒāĻ­ā§‹āĻ— āĻ•āϰ⧇āϛ⧇āύ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻ•ā§āϰ⧋āĻŽ āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āϟ āĻļ⧇āĻ–āĻžāϰ āϝāĻžāĻ¤ā§āϰāĻž āϚāĻžāϞāĻŋāϝāĻŧ⧇ āϝ⧇āϤ⧇ āωāĻ¤ā§āϤ⧇āϜāĻŋāϤ⧎ āφāĻŽāϰāĻž āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻļāĻŋāĻ•ā§āώāĻžāϰ āĻĒāĻĨāϟāĻŋ āϏ⧁āĻĒāĻžāϰāĻŋāĻļ āĻ•āϰāĻŋ:

  • āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀āϰ āĻ—āĻžāχāĻĄā§‡ āωāĻ¨ā§āύāϤ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āϤ⧈āϰāĻŋāϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāĻžāϏāĻ™ā§āĻ—āĻŋāĻ• āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ⧇āϰ āϟ⧁āĻ•āϰ⧋āϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻ•āϝāĻŧ⧇āĻ• āĻĄāϜāύ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āϞāĻŋāĻ™ā§āĻ• āϰāϝāĻŧ⧇āϛ⧇⧎
  • āĻ–ā§‹āϞāĻž āĻ“āϝāĻŧ⧇āĻŦ⧇ āϝāĻž āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧ āϤāĻžāϰ āĻŦāĻžāχāϰ⧇āĻ“ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύāϗ⧁āϞāĻŋāϰ āĻļāĻ•ā§āϤāĻŋāĻļāĻžāϞ⧀ APIāϗ⧁āϞāĻŋāϤ⧇ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āϰāϝāĻŧ⧇āϛ⧇⧎ Chrome API-āĻāϰ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻĒā§āϰāϤāĻŋāϟāĻŋ API-āĻāϰ āĻŽāĻ§ā§āϝ āĻĻāĻŋāϝāĻŧ⧇ āϚāϞ⧇āĨ¤