Self-host สำหรับ Linux

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

แพ็กเกจ

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

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

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

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

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

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

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

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

เลือกโหมดนักพัฒนาซอฟต์แวร์แล้ว จากนั้นคลิกส่วนขยายของ Click Pack

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

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

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 สาเหตุที่พบบ่อยอันดับ 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 หรือไม่ ค่านี้ควรตรงกับค่าของ "เวอร์ชัน" ในไฟล์ manifest.json ของไฟล์ .crx

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

การทดสอบ

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

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

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

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

กลไกการอัปเดตอัตโนมัติขั้นพื้นฐานได้รับการออกแบบมาเพื่อทำให้การทำงานของฝั่งเซิร์ฟเวอร์เป็นเรื่องง่าย เพียงแค่วาง ไฟล์ 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: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • รุ่น: "1.1"
  • ส่วนขยาย 2
    • รหัส: "bbbbbbbbbbbbbbbbbbbbbbbbbbbb ซึ่ง
    • รุ่น: "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 อัปเดตที่ไม่ซ้ำกันแต่ละรายการ สำหรับ ตัวอย่างเช่น หากผู้ใช้ติดตั้งส่วนขยายทั้งสอง คำขอทั้งสองจะรวมเข้าด้วยกัน คำขอเดียว:

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" ลงในเอลิเมนต์ <app> ในการตอบกลับการอัปเดต

<?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 ขึ้นไป