การติดตั้งส่วนขยายใน Linux

เฉพาะผู้ใช้ Linux เท่านั้นที่สามารถติดตั้งส่วนขยายที่โฮสต์นอก Chrome เว็บสโตร์ บทความนี้อธิบายวิธีจัดแพ็กเกจ โฮสต์ และอัปเดตไฟล์ .crx จากเซิร์ฟเวอร์ส่วนตัว หากคุณเผยแพร่ส่วนขยายหรือธีมผ่าน Chrome เว็บสโตร์เพียงอย่างเดียว โปรดอ่านโฮสติ้งและการอัปเดตของเว็บสโตร์

การจัดแพ็กเกจ

ส่วนขยายและธีมจะแสดงเป็น .crx ไฟล์ เมื่ออัปโหลดผ่านหน้าแดชบอร์ดสำหรับนักพัฒนาซอฟต์แวร์ Chrome หน้าแดชบอร์ดจะสร้างไฟล์ .crx โดยอัตโนมัติ หากเผยแพร่บนเซิร์ฟเวอร์ส่วนตัว คุณจะต้องสร้างไฟล์ .crx ในเครื่องหรือดาวน์โหลดจาก Chrome เว็บสโตร์

ดาวน์โหลด .crx จาก Chrome เว็บสโตร์

หากส่วนขยายโฮสต์อยู่ใน Chrome เว็บสโตร์ คุณจะดาวน์โหลดไฟล์ .crx ได้จากหน้าแดชบอร์ดสำหรับนักพัฒนาซอฟต์แวร์ ค้นหาส่วนขยายภายใต้ "รายชื่อของคุณ" และคลิก "ข้อมูลเพิ่มเติม" ในหน้าต่างป๊อปอัป ให้คลิกลิงก์ main.crx สีน้ำเงินเพื่อดาวน์โหลด

ดาวน์โหลด .crx จากหน้าแดชบอร์ดสำหรับนักพัฒนาซอฟต์แวร์

ไฟล์ที่ดาวน์โหลดจะโฮสต์บนเซิร์ฟเวอร์ส่วนตัว นี่เป็นวิธีที่ปลอดภัยที่สุดในการโฮสต์ส่วนขยายภายในเครื่อง เนื่องจาก Chrome เว็บสโตร์จะรับรองเนื้อหาของส่วนขยาย ซึ่งจะช่วยตรวจจับการโจมตีที่อาจเกิดขึ้นและการปลอมแปลง

สร้าง .crx ในเครื่อง

ระบบจะแปลงไดเรกทอรีส่วนขยายเป็น .crx ไฟล์ที่หน้าการจัดการส่วนขยาย ไปที่ chrome://extensions/ ในominibox หรือคลิกเมนู Chrome จากนั้นวางเมาส์เหนือ "เครื่องมือเพิ่มเติม" แล้วเลือก "ส่วนขยาย"

ในหน้าการจัดการส่วนขยาย ให้เปิดใช้โหมดนักพัฒนาซอฟต์แวร์โดยคลิกสวิตช์เปิด/ปิดข้างโหมดนักพัฒนาซอฟต์แวร์ จากนั้นเลือกปุ่มแพ็คส่วนขยาย

โหมดนักพัฒนาซอฟต์แวร์ถูกเลือกไว้ แล้วคลิกแพ็กส่วนขยาย

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

ระบุเส้นทางส่วนขยาย แล้วคลิกแพ็กส่วนขยาย

Chrome จะสร้างไฟล์ 2 ไฟล์ ได้แก่ ไฟล์ .crx และไฟล์ .pem ซึ่งประกอบด้วยคีย์ส่วนตัวของส่วนขยาย

ไฟล์ส่วนขยายที่อยู่ในแพ็กเกจ

โปรดอย่าทำคีย์ส่วนตัวหาย โปรดเก็บไฟล์ .pem ในที่ปลอดภัยและเป็นความลับ เนื่องจากคุณจะต้องอัปเดตส่วนขยาย

อัปเดตแพ็กเกจ .crx

อัปเดตไฟล์ .crx ของส่วนขยายโดยเพิ่มหมายเลขเวอร์ชันใน manifest.json

{
  ...
  "version": "1.5",
  ...
  }
}
{
  ...
  "version": "1.6",
  ...
  }
}

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

การอัปเดตไฟล์ส่วนขยาย

หน้านี้จะแสดงเส้นทางสำหรับส่วนขยายแพ็กเกจที่อัปเดตแล้ว

การอัปเดตไฟล์ส่วนขยาย

จัดแพ็กเกจผ่านบรรทัดคำสั่ง

สร้างแพ็กเกจส่วนขยายในบรรทัดคำสั่งโดยเรียกใช้ chrome.exe ใช้แฟล็ก --pack-extension เพื่อระบุตำแหน่งโฟลเดอร์ของส่วนขยายและแฟล็ก --pack-extension-key เพื่อระบุตำแหน่งไฟล์คีย์ส่วนตัวของส่วนขยาย

chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem

โฮสติ้ง

เซิร์ฟเวอร์ที่โฮสต์ไฟล์ .crx ต้องใช้ส่วนหัว HTTP ที่เหมาะสมเพื่ออนุญาตให้ผู้ใช้ติดตั้งส่วนขยายด้วยการคลิกลิงก์

Google Chrome จะถือว่าไฟล์สามารถติดตั้งได้ ถ้าเงื่อนไขข้อใดข้อหนึ่งต่อไปนี้เป็นจริง

  • ไฟล์มีประเภทเนื้อหา application/x-chrome-extension
  • คำต่อท้ายไฟล์คือ .crx และทั้งคู่ต่อไปนี้เป็นจริง
    • ไฟล์จะไม่ได้แสดงโดยมีส่วนหัว HTTP X-Content-Type-Options: nosniff
    • ไฟล์จะแสดงพร้อมกับเนื้อหาประเภทใดประเภทหนึ่งต่อไปนี้
    • สตริงว่าง
    • "text/plain"
    • "application/octet-stream"
    • "ไม่ทราบ/ไม่รู้จัก"
    • "แอปพลิเคชัน/ไม่รู้จัก"
    • "*/*"

สาเหตุที่พบบ่อยที่สุดที่ทำให้ตรวจไม่พบไฟล์ที่ติดตั้งได้คือเซิร์ฟเวอร์ส่งส่วนหัว X-Content-Type-Options: nosniff สาเหตุที่พบบ่อยที่สุดข้อที่ 2 คือเซิร์ฟเวอร์ส่งประเภทเนื้อหาที่ไม่รู้จัก ซึ่งไม่มีอยู่ในรายการก่อนหน้า ในการแก้ปัญหาส่วนหัว HTTP ให้เปลี่ยนการกำหนดค่าของเซิร์ฟเวอร์หรือลองฝากไฟล์ .crx ไว้ในเซิร์ฟเวอร์อื่น

กำลังอัปเดต

เบราว์เซอร์จะตรวจสอบส่วนขยายที่ติดตั้งไว้ทุก 2-3 ชั่วโมงเพื่อหา URL อัปเดต สำหรับแต่ละรายการ จะมีการส่งคำขอไปยัง URL นั้นเพื่อหาไฟล์ XML ไฟล์ Manifest สำหรับอัปเดต

  • เนื้อหาที่แสดงผลจากการตรวจสอบการอัปเดตคือเอกสาร XML ไฟล์ Manifest ของการอัปเดตที่แสดงส่วนขยายเวอร์ชันล่าสุด

หากไฟล์ Manifest ของการอัปเดตระบุเวอร์ชันที่ใหม่กว่าเวอร์ชันที่ติดตั้ง เบราว์เซอร์จะดาวน์โหลดและติดตั้งเวอร์ชันใหม่ ไฟล์ .crx ใหม่จะต้องลงนามด้วยคีย์ส่วนตัวเดียวกันกับเวอร์ชันที่ติดตั้งอยู่ในปัจจุบัน เช่นเดียวกับการอัปเดตด้วยตนเอง

หมายเหตุ: เพื่อรักษาความเป็นส่วนตัวของผู้ใช้ Google Chrome จะไม่ส่งส่วนหัวของคุกกี้ที่มีคำขอไฟล์ Manifest การอัปเดตอัตโนมัติ และจะไม่สนใจส่วนหัว Set-Cookie ในการตอบกลับคำขอดังกล่าว

อัปเดต URL

ส่วนขยายที่โฮสต์บนเซิร์ฟเวอร์ภายนอก Chrome เว็บสโตร์ต้องมีช่อง update_url ในไฟล์ manifest.json

{
  "name": "My extension",
  ...
  "update_url": "https://myhost.com/mytestextension/updates.xml",
  ...
}

อัปเดตไฟล์ Manifest

ไฟล์ Manifest ของการอัปเดตที่เซิร์ฟเวอร์ส่งกลับมาควรเป็นเอกสาร XML

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='https://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
  </app>
</gupdate>

รูปแบบ XML นี้ดึงมาจาก Omaha ซึ่งเป็นโครงสร้างพื้นฐานในการอัปเดตของ Google ระบบส่วนขยายใช้แอตทริบิวต์ต่อไปนี้สำหรับองค์ประกอบ <app> และ <updatecheck> ของไฟล์ Manifest อัปเดต

appidระบบจะสร้างรหัสส่วนขยายตามแฮชของคีย์สาธารณะตามที่อธิบายไว้ในแพ็กเกจ รหัสของส่วนขยายจะแสดงอยู่ในหน้าการจัดการส่วนขยาย
ฐานของโค้ดHTTPS URL ไปยังไฟล์ .crx
เวอร์ชันไคลเอ็นต์จะใช้เพื่อพิจารณาว่าควรดาวน์โหลดไฟล์ .crx ที่ระบุโดย codebase หรือไม่ ซึ่งควรตรงกับค่าของ "version" ในไฟล์ manifest.json ของไฟล์ .crx

ไฟล์ XML ไฟล์ Manifest ของการอัปเดตอาจมีข้อมูลเกี่ยวกับนามสกุลหลายรายการโดยรวมองค์ประกอบ <app> ไว้หลายรายการ

การทดสอบ

ความถี่ในการตรวจหาการอัปเดตเริ่มต้นคือหลายชั่วโมง แต่คุณสามารถบังคับอัปเดตโดยใช้ปุ่มอัปเดตส่วนขยายเลยในหน้าการจัดการส่วนขยาย

อัปเดตส่วนขยายเลย

การดำเนินการนี้จะเริ่มตรวจสอบส่วนขยายที่ติดตั้งทั้งหมด

การใช้งานขั้นสูง: พารามิเตอร์คำขอ

กลไกการอัปเดตอัตโนมัติพื้นฐานออกแบบมาให้ทำงานฝั่งเซิร์ฟเวอร์ได้ง่ายๆ เพียงวางไฟล์ XML แบบคงที่ไปยังเว็บเซิร์ฟเวอร์ทั่วไป เช่น Apache และอัปเดตไฟล์ XML นั้นเมื่อมีการเปิดตัวส่วนขยายรุ่นใหม่

นักพัฒนาซอฟต์แวร์ที่โฮสต์ส่วนขยายหลายรายการอาจตรวจสอบพารามิเตอร์คำขอ ซึ่งจะระบุรหัสและเวอร์ชันของส่วนขยายในคำขออัปเดต การใส่พารามิเตอร์เหล่านี้ทำให้ส่วนขยายอัปเดตจาก URL เดียวกันที่ใช้โค้ดฝั่งเซิร์ฟเวอร์แบบไดนามิกแทนไฟล์ XML แบบคงที่ได้

รูปแบบของพารามิเตอร์คำขอคือ

?x=EXTENSION_DATA

โดย EXTENSION_DATA เป็นสตริงที่เข้ารหัส URL ของรูปแบบ

id=EXTENSION\_ID&v=EXTENSION\_VERSION

ตัวอย่างเช่น ส่วนขยาย 2 รายการชี้ไปยัง URL อัปเดตเดียวกัน (https://test.com/extension_updates.php) ดังนี้

  • ส่วนขยาย 1
    • รหัส: "aaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • เวอร์ชัน: "1.1"
  • ส่วนขยาย 2
    • รหัส: "bbbbbbbbbbbbbbbbbbbbbbbb"
    • เวอร์ชัน: "0.4"

คำขออัปเดตส่วนขยายแต่ละรายการ

https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1

และ

https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

คุณแสดงส่วนขยายหลายรายการในคำขอเดียวสำหรับ URL อัปเดตที่ไม่ซ้ำกันแต่ละรายการได้ สำหรับตัวอย่างข้างต้น หากผู้ใช้ติดตั้งส่วนขยายทั้ง 2 รายการไว้ คำขอทั้ง 2 รายการจะรวมเข้าด้วยกันเป็นคำขอเดียว

https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

หากจำนวนส่วนขยายที่ติดตั้งโดยใช้ URL อัปเดตเดียวกันมีมากจนทำให้ URL คำขอ GET ยาวเกินไป (เกิน 2,000 อักขระ) การตรวจสอบการอัปเดตจะออกคำขอ GET เพิ่มเติมตามที่จำเป็น

การใช้งานขั้นสูง: เวอร์ชันต่ำสุดของเบราว์เซอร์

เมื่อมีการเพิ่ม API ลงในระบบส่วนขยายมากขึ้น อาจมีการเปิดตัวส่วนขยายเวอร์ชันอัปเดตที่จะทำงานได้เฉพาะกับเบราว์เซอร์เวอร์ชันใหม่เท่านั้น แม้ว่า Google Chrome จะอัปเดตอัตโนมัติ แต่ อาจต้องใช้เวลา 2-3 วันก่อนที่ฐานผู้ใช้ส่วนใหญ่จะอัปเดตเป็นรุ่นใหม่ เพื่อให้แน่ใจว่าการอัปเดตที่ระบุจะมีผลกับ Google Chrome ในเวอร์ชันที่เท่ากับหรือสูงกว่าเวอร์ชันที่ระบุเท่านั้น ให้เพิ่มแอตทริบิวต์ "prodversionmin" ลงในองค์ประกอบ ในการตอบกลับการอัปเดต

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' prodversionmin='3.0.193.0'/>
  </app>
</gupdate>

ซึ่งจะช่วยให้มั่นใจได้ว่าผู้ใช้จะอัปเดตเป็นเวอร์ชัน 2 โดยอัตโนมัติเมื่อใช้ Google Chrome 3.0.193.0 ขึ้นไปเท่านั้น