Tôi đã tạo một tiện ích chrome cơ bản thực sự và thiết lập máy chủ node.js đơn giản để kiểm tra tính năng tự động cập nhật. Máy chủ lưu trữ tệp .crx để tôi có thể cài đặt tiện ích mở rộng mà không gặp bất kỳ sự cố nào đơn giản bằng cách truy cập http://localhost:3000/clients/chrome/extension.crx
. Nhưng khi tôi truy cập tools
->extensions
và nhấp vào Update extensions now
, tiện ích không tìm nạp phiên bản mới. Máy chủ không nhận được yêu cầu cho localhost:3000/clients/chrome/updates.xml
, nhưng không nhận được bất kỳ yêu cầu nào cho tệp extensions.crx mới. Tôi làm gì sai ở đây?Tại sao tiện ích chrome của tôi không tự động cập nhật?
MÃ
Hãy để tôi chỉ hướng dẫn bạn qua các mã để làm reproductible này:
$ cây
.
|-- clients
| `-- chrome
| |-- extension
| | `-- manifest.json
| |-- extension.crx
| |-- extension.pem
| `-- updates.xml
`-- web.js
Phần mở rộng thực sự chỉ là một file manifest .
manifest.json
{
"name": "testing auto-updates",
"version": "1.0",
"update_url": "http://localhost:3000/clients/chrome/updates.xml"
}
Như bạn thấy, tôi đề cập đến một update_url để tự động cập nhật càng tốt.
updates.xml
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='fkphbmkcjefhhnnlhhjlnkellidponel'>
<updatecheck codebase='http://localhost:3000/clients/chrome/extension.crx' version='1.0' />
</app>
</gupdate>
Bao bì phần mở rộng tạo extension.crx và extension.pem.
Tôi cũng làm một máy chủ Node.js đơn giản để phục vụ các tập tin:
web.js
var express = require('express');
var app = express.createServer(express.logger());
/* ROUTES */
app.get('/clients/chrome/extension.crx', function(request, response)
{
response.contentType('application/x-chrome-extension');
response.sendfile('clients/chrome/extension.crx');
});
app.get('/clients/chrome/updates.xml', function(request, response)
{
response.sendfile('clients/chrome/updates.xml');
});
/* ROUTES END */
var port = process.env.PORT || 3000;
app.listen(port, function() {
console.log("Listening on " + port);
});
Ok, hãy kiểm tra điều này. Đầu tiên, khởi động server:
$ node web.js
Listening on 3000
Cài đặt phần mở rộng bằng cách truy cập http://localhost:3000/clients/chrome/extension.crx. Phần này hoạt động hoàn hảo trong lần thử đầu tiên. Các máy chủ ghi lại yêu cầu:
127.0.0.1 - - [Thu, 26 Apr 2012 22:25:47 GMT] "GET /clients/chrome/extension.crx HTTP/1.1" 304 - "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19 (KHTML, like Gecko) Ubuntu/11.10 Chromium/18.0.1025.151 Chrome/18.0.1025.151 Safari/535.19"
Hãy sửa đổi phần mở rộng:
- Trong manifest.json, thiết
version
xuống còn 1,1 (intead của 1.0). - Trong tệp updates.xml, đặt
version
thành 1.1 (thay vì 1.0). - Đóng gói lại tiện ích mở rộng bằng cách sử dụng cùng một tệp
extention.pem
làm lần đầu tiên. - Tệp
extension.crx
mới được tạo. - Bấm vào
Tools
->Extensions
->Update extensions now
Một mong chờ để thấy sự thay đổi số phiên bản của phần mở rộng xuống còn 1,1 trong Tools
->Extensions
.
Thay vào đó, không có gì xảy ra. Máy chủ nhận được yêu cầu cho updates.xml
nhưng không nhận được extension.crx
.
Ít nhất thành công của tôi với Dropbox quy định khả năng HTTPS HTTPS được thi hành không có giấy tờ yêu cầu, đó là một trong những dự đoán trước đây của tôi, vì Dropbox hoạt động tốt như nhau qua HTTP và HTTPS. – apsillers
Đó là điều kỳ lạ nhất: Tôi sắp thử điều này với nhiều tiêu đề khác nhau và xem sự khác biệt của nó là gì, nhưng sau đó, nó chỉ làm việc trong lần thử đầu tiên mà không sửa đổi ... Tôi sẽ đăng lại nếu tôi tìm hiểu Tôi hơi say trong nỗ lực đầu tiên .. – Shawn
Lý thuyết duy nhất khác của tôi là tệp 1.1 CRX cần được đặt tên khác với tệp 1.0 gốc? Đó là điều duy nhất tôi có thể nghĩ rằng tôi đã không kiểm tra và có thể đã làm khác trong các bài kiểm tra của tôi. – apsillers