Linux เป็นแพลตฟอร์มเดียวที่ผู้ใช้ Chrome สามารถติดตั้งส่วนขยายที่โฮสต์นอก
Chrome เว็บสโตร์ บทความนี้อธิบายวิธีจัดแพ็กเกจ โฮสต์ และอัปเดต crx
จากเว็บเซิร์ฟเวอร์สำหรับจุดประสงค์ทั่วไป หากคุณเผยแพร่ส่วนขยายหรือธีมเพียงอย่างเดียว
ผ่าน Chrome เว็บสโตร์ โปรดอ่านโฮสติ้งของ Webstore และ
กำลังอัปเดต
แพ็กเกจ
ส่วนขยายและธีมจะแสดงเป็นไฟล์ .crx
เมื่ออัปโหลดผ่านนักพัฒนาซอฟต์แวร์ของ Chrome
หน้าแดชบอร์ด หน้าแดชบอร์ดจะสร้างไฟล์ crx
โดยอัตโนมัติ หากเผยแพร่
บนเซิร์ฟเวอร์ส่วนตัว คุณจะต้องสร้างไฟล์ crx
ในเครื่องหรือดาวน์โหลดจาก Chrome
เว็บสโตร์
ดาวน์โหลด .crx จาก Chrome เว็บสโตร์
หากส่วนขยายโฮสต์อยู่ใน Chrome เว็บสโตร์ ไฟล์ .crx
จะดาวน์โหลดได้จาก
หน้าแดชบอร์ดสำหรับนักพัฒนาซอฟต์แวร์ หาส่วนขยายในส่วน "ข้อมูลของคุณ" แล้วคลิก "ข้อมูลเพิ่มเติม" ใน
ในหน้าต่างป๊อปอัป ให้คลิกลิงก์ main.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"
"\*/\*"
- ไฟล์ไม่ได้แสดงผลพร้อมส่วนหัว HTTP
สาเหตุที่พบบ่อยที่สุดของการไม่จดจำไฟล์ที่ติดตั้งได้คือ เซิร์ฟเวอร์ส่ง
ส่วนหัว X-Content-Type-Options: nosniff
สาเหตุที่พบบ่อยอันดับ 2 คือ เซิร์ฟเวอร์ส่ง
ประเภทเนื้อหาที่ไม่รู้จัก - ไม่ได้อยู่ในรายการก่อนหน้า วิธีแก้ไขปัญหาเกี่ยวกับส่วนหัวของ HTTP ให้ทำการเปลี่ยนแปลง
การกำหนดค่าของเซิร์ฟเวอร์หรือลองโฮสต์ไฟล์ .crx
ในเซิร์ฟเวอร์อื่น
อัปเดต
ทุก 2-3 ชั่วโมง เบราว์เซอร์จะตรวจสอบส่วนขยายที่ติดตั้งแล้วเพื่อหา URL อัปเดต สำหรับแต่ละผลลัพธ์ คำขอไปยัง URL นั้นเพื่อหาไฟล์ XML Manifest สำหรับการอัปเดต
- เนื้อหาที่แสดงผลโดยการตรวจสอบการอัปเดตเป็นเอกสาร XML ของอัปเดตไฟล์ Manifest ที่แสดงไฟล์เวอร์ชันล่าสุด เวอร์ชันส่วนขยาย
หากไฟล์ Manifest ของการอัปเดตระบุเวอร์ชันที่ใหม่กว่าที่ติดตั้งไว้ เบราว์เซอร์
ดาวน์โหลดและติดตั้งเวอร์ชันใหม่ได้ ไฟล์ .crx
ใหม่จะต้องได้รับการเซ็นชื่อเช่นเดียวกับการอัปเดตด้วยตนเอง
ด้วยคีย์ส่วนตัวเดียวกับเวอร์ชันที่ติดตั้งอยู่ในปัจจุบัน
อัปเดต 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 ขึ้นไป