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

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

บรรจุภัณฑ์

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

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

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

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

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

สร้างไฟล์ .crx ในเครื่อง

ระบบจะแปลงไดเรกทอรีส่วนขยายเป็นไฟล์ .crx ในหน้าการจัดการส่วนขยาย ไปที่ chrome://extensions/ ในแถบที่อยู่ หรือคลิกเมนู 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 และทั้ง 2 ข้อต่อไปนี้เป็นจริง
    • ไฟล์ไม่ได้แสดงพร้อมส่วนหัว HTTP X-Content-Type-Options: nosniff
    • ไฟล์แสดงโดยมีประเภทเนื้อหาต่อไปนี้
    • สตริงว่าง
    • "text/plain"
    • "application/octet-stream"
    • "unknown/unknown"
    • "application/unknown"
    • "*/*"

สาเหตุที่พบบ่อยที่สุดที่ทำให้ระบบไม่รู้จักไฟล์ที่ติดตั้งได้คือเซิร์ฟเวอร์ส่งส่วนหัว X-Content-Type-Options: nosniff สาเหตุที่พบบ่อยรองลงมาคือเซิร์ฟเวอร์ส่ง ประเภทเนื้อหาที่ไม่รู้จัก ซึ่งเป็นประเภทที่ไม่ได้อยู่ในรายการก่อนหน้า หากต้องการแก้ไขปัญหาเกี่ยวกับส่วนหัว 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" ในไฟล์ .crx ของไฟล์ manifest.json

ไฟล์ 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
    • ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • เวอร์ชัน: "1.1"
  • ส่วนขยาย 2
    • ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • เวอร์ชัน: "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 การอัปเดตเดียวกันมีมากพอที่คำขอ GET URL ยาวเกินไป (ประมาณ 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 ขึ้นไป