8

Tôi đã viết một số tiện ích mở rộng trình duyệt trong vài tuần qua và cho đến hôm nay, tôi nghĩ rằng WebExtension dành cho Firefox sẽ hoạt động khá tự động trong Chrome. Vì vậy, tôi đã cố gắng viết mã của mình theo các ví dụ của Mozilla.
Nhưng hôm nay tôi nhận ra rằng không có đề cập đến Lời hứa trong tài liệu API cho Tiện ích mở rộng của Chrome.
Tôi đã sử dụng đúng các Lời hứa trong suốt mã cho tất cả Tiện ích mở rộng của mình.Hỗ trợ lời hứa cho API tiện ích mở rộng của Chrome?

Vì vậy, bây giờ câu hỏi của tôi là, mã của tôi có hoạt động trong Chrome không? Hoặc nó sẽ làm việc nếu tôi thêm một tuyên bố var browser = chrome ở đầu trang?
Hoặc Chrome không hỗ trợ Hứa hẹn trên API?
Nếu Chrome chưa hỗ trợ Hứa hẹn trên các chức năng API, Chrome có hỗ trợ các chức năng này trong tương lai không?

Lưu ý, tôi biết dự án này: https://github.com/mozilla/webextension-polyfill
Nhưng tôi không sẵn sàng trải qua những rắc rối khi đưa thư viện đó vào mọi nơi. Ngoài ra, nó có lỗi gây phiền nhiễu trong đó.

Và bên cạnh đó tôi không có Chrome hoặc Chromium và tôi không thể cài đặt chúng vì lý do quyền riêng tư và bảo mật.

+1

Vâng, như bạn có thể thấy trong các mô tả polyfill, nó yêu cầu trong Chrome. Đối với tương lai, công việc vẫn chưa bắt đầu. Có một vấn đề trên https://crbug.com mặc dù. – wOxxOm

+3

https://crbug.com/328932 –

Trả lời

3

... cho đến hôm nay tôi nghĩ rằng WebExtension dành cho Firefox sẽ hoạt động khá tự động trong Chrome.

WebTăng cường được tạo ra với khả năng tương thích ngược với các tiện ích mở rộng của Chrome. Không gian tên chrome.* khả dụng cho các API được hỗ trợ. Mục tiêu ở đây là để dễ dàng chuyển các phần mở rộng hiện có sang FF để nhanh chóng khởi động hệ sinh thái.

Tuy nhiên, Mozilla bỏ qua khả năng tương thích về phía trước với không gian tên browser.*. Mozilla đã quyết định đi với một phương pháp tiếp cận dựa trên lời hứa cho API, nhưng chỉ cho không gian tên mới đó.

Bây giờ, câu hỏi của tôi là mã của tôi có hoạt động trong Chrome không?
Hoặc nó có hoạt động nếu tôi thêm tuyên bố var browser = chrome ở trên cùng không?

Không; chúng cư xử khác nhau và có chữ ký khác nhau. Chrome sẽ từ chối cuộc gọi mà không cần gọi lại rõ ràng. browser.* biến thể sẽ phát ra lời hứa thay thế.

Hoặc Chrome không hỗ trợ lời hứa trên API?
Nếu Chrome chưa hỗ trợ Hứa hẹn trên các chức năng API, Chrome có hỗ trợ các chức năng này trong tương lai không?

Như đã đề cập trong nhận xét, viết lại dựa trên lời hứa của API is considered by Chrome, nhưng không có công việc hiển thị nào được thực hiện. Tuy nhiên, tồn tại các polyfills, bao gồm the one you mentioned. Khác với phương pháp gói chính mình để tạo ra polyfill của riêng bạn, không có giải pháp khác.

Và bên cạnh đó tôi không có Chrome hoặc Chromium và tôi không thể cài đặt chúng vì lý do quyền riêng tư và bảo mật.

Sau đó, bạn không thể kiểm tra chính xác các cổng của mình; đó không phải là cách tiếp cận tốt cho người dùng tiềm năng của bạn.Bạn tốt hơn nên tắt số không phải là trong trường hợp này.

0

Tôi đã tạo thư viện này https://github.com/lawlietmester/webextension để làm điều này mà không có một quy tắc chung nào như trong webextension-polyfill.

Thư viện của tôi là phương thức crossbrowser để tạo một đối tượng Browser mà không sửa đổi trình duyệt/chrome gốc. Giống như jQuery trong thời gian cũ.

Để sử dụng nó một lần duy nhất - nhập khẩu nó trong tiến trình nền và làm cho nó toàn cầu đối với nền, sau đó cho nhập khẩu khác (từ cửa sổ bật lên chẳng hạn) sử dụng nhập khẩu từ

(typeof browser === 'undefined' ? chrome : browser).extension.getBackgroundPage().Browser

0

Tôi đã không nhìn tại API browser, vì vậy tôi có thể không hoạt động, nhưng nếu chỉ có sự khác biệt là các API của Firefox trả về lời hứa thay vì sử dụng gọi lại, thư viện chrome-promise có thể giúp bạn. Nó kết thúc tốt đẹp tất cả các cuộc gọi API yêu cầu gọi lại trong các hàm trả về các lời hứa thay thế.

Sau đó, bạn có thể làm một cái gì đó như thế này trong Chrome:

var browser = new ChromePromise(); 

Và sau đó thực hiện lời hứa gọi:

browser.storage.local.get(null).then(data => console.log(data)); 
Các vấn đề liên quan