Câu hỏi thường gặp

Nếu bạn không tìm thấy câu trả lời cho câu hỏi của mình tại đây, hãy thử Câu hỏi thường gặp về Cửa hàng Chrome trực tuyến, thẻ [google-chrome-extension] trên Stack Overflow, nhóm chromium-extensions hoặc trợ giúp cửa hàng.

Giải pháp chung

Tiện ích của Google Chrome là gì?

Tiện ích của Google Chrome là các ứng dụng chạy bên trong trình duyệt Chrome và cung cấp chức năng bổ sung, tích hợp với các trang web hoặc dịch vụ của bên thứ ba cũng như trải nghiệm duyệt web tuỳ chỉnh.

Làm cách nào để thiết lập Chrome cho hoạt động phát triển tiện ích?

Miễn là bạn sử dụng phiên bản Chrome hỗ trợ tiện ích, bạn đã có mọi thứ cần thiết để bắt đầu viết tiện ích của riêng mình. Bạn có thể bắt đầu bằng cách bật Chế độ nhà phát triển.

Nhấp vào biểu tượng trình đơn Chrome và chọn Tiện ích từ trình đơn Công cụ. Nhớ đánh dấu vào hộp "Chế độ dành cho nhà phát triển" ở góc trên cùng bên phải. Giờ đây, bạn có thể tải lại các tiện ích, tải thư mục tệp đã giải nén như thể đó là một tiện ích đóng gói, v.v. Để xem hướng dẫn đầy đủ, hãy xem phần Bắt đầu.

Những công nghệ nào được sử dụng để viết tiện ích cho Chrome?

Tiện ích được viết bằng chính công nghệ web tiêu chuẩn mà nhà phát triển dùng để tạo trang web. HTML được dùng làm ngôn ngữ đánh dấu nội dung, CSS được dùng để định kiểu và JavaScript để viết tập lệnh. Vì Chrome hỗ trợ HTML5 và CSS3 nên nhà phát triển có thể sử dụng các công nghệ web mở mới nhất như canvas và ảnh động CSS trong tiện ích của mình. Các tiện ích cũng có quyền truy cập vào một số API JavaScript giúp thực hiện các chức năng như mã hoá JSON và tương tác với trình duyệt.

Các tiện ích có được tìm nạp từ web mỗi khi trình duyệt được tải không?

Tiện ích được trình duyệt Chrome tải xuống khi cài đặt và sau đó sẽ chạy khỏi ổ đĩa cục bộ để tăng hiệu suất. Tuy nhiên, nếu phiên bản mới của tiện ích được đẩy trực tuyến, phiên bản đó sẽ tự động được tải xuống ở chế độ nền cho mọi người dùng đã cài đặt tiện ích. Các tiện ích cũng có thể yêu cầu nội dung từ xa bất cứ lúc nào để tương tác với dịch vụ web hoặc lấy nội dung mới từ web.

Làm thế nào để xác định phiên bản Chrome nào được triển khai cho kênh nào?

Để xác định phiên bản Chrome hiện có trên từng nền tảng khác nhau, hãy truy cập omahaproxy.appspot.com. Trên trang web đó, bạn sẽ thấy dữ liệu ở định dạng tương tự như:

cf,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,canary,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####

Mỗi dòng thể hiện thông tin về một kiểu kết hợp nền tảng và kênh khác nhau. Các nền tảng được liệt kê là cf (Google Chrome Frame), linux, mac, wincros (Google ChromeOS). Các kênh được liệt kê là canary, dev, betastable. Hai con số gồm bốn phần sau kênh biểu thị các phiên bản hiện tại và trước đây của Chrome được triển khai cho tổ hợp kênh nền tảng đó. Thông tin còn lại là siêu dữ liệu về thời điểm phát hành bản phát hành lần đầu tiên, cũng như số bản sửa đổi liên kết với từng bản dựng.

Tính năng

Tiện ích có thể thực hiện yêu cầu Ajax trên nhiều miền không?

Có. Tiện ích có thể thực hiện yêu cầu trên nhiều miền. Hãy xem trang này để biết thêm thông tin.

Tiện ích có thể sử dụng dịch vụ web của bên thứ ba không?

Có. Các tiện ích có thể thực hiện các yêu cầu Ajax trên nhiều miền, vì vậy, chúng có thể gọi trực tiếp các API từ xa. Các API cung cấp dữ liệu ở định dạng JSON đặc biệt dễ sử dụng.

Các tiện ích có thể mã hoá/giải mã dữ liệu JSON không?

Có, vì V8 (công cụ JavaScript của Chrome) hỗ trợ JSON.stringify và JSON.parse, nên bạn có thể sử dụng các hàm này trong tiện ích của mình như mô tả tại đây mà không cần thêm bất kỳ thư viện JSON nào vào mã của mình.

Các tiện ích có thể lưu trữ dữ liệu cục bộ không?

Có, các tiện ích có thể sử dụng localStorage để lưu trữ vĩnh viễn dữ liệu chuỗi. Khi sử dụng các hàm JSON tích hợp sẵn của Chrome, bạn có thể lưu trữ các cấu trúc dữ liệu phức tạp trong localStorage. Đối với các tiện ích cần thực thi các truy vấn SQL trên dữ liệu đã lưu trữ, Chrome sẽ triển khai cơ sở dữ liệu SQL phía máy khách. Bạn cũng có thể sử dụng cơ sở dữ liệu này.

Các tiện ích có thể sử dụng OAuth không?

Có, có những tiện ích sử dụng OAuth để truy cập API dữ liệu từ xa. Hầu hết các nhà phát triển đều thấy thuận tiện khi sử dụng thư viện OAuth JavaScript để đơn giản hoá quy trình ký yêu cầu OAuth.

Các tiện ích có thể tạo giao diện người dùng bên ngoài trang web được hiển thị không?

Có, tiện ích của bạn có thể thêm các nút vào giao diện người dùng của trình duyệt Chrome. Xem các thao tác trên trình duyệtcác thao tác trên trang để biết thêm thông tin.

Tiện ích cũng có thể tạo thông báo bật lên, xuất hiện bên ngoài cửa sổ trình duyệt. Xem tài liệu về thông báo trên màn hình để biết thêm thông tin chi tiết.

Tiện ích có thể lắng nghe các lượt nhấp vào thẻ và nút điều hướng trong Chrome không?

Không. Các tiện ích chỉ nghe được các sự kiện được mô tả trong tài liệu API.

Hai tiện ích có thể giao tiếp với nhau không?

Có, tiện ích có thể chuyển thông báo đến các tiện ích khác. Xem tài liệu về cách chuyển thông báo để biết thêm thông tin.

Tiện ích có thể sử dụng Google Analytics không?

Có, vì các tiện ích được tạo giống như trang web, nên chúng có thể sử dụng Google Analytics để theo dõi mức sử dụng. Tuy nhiên, bạn phải sửa đổi mã theo dõi để lấy phiên bản HTTPS của thư viện Google Analytics. Hãy xem hướng dẫn này để biết thêm thông tin về cách thực hiện việc này.

Tiện ích có thể sửa đổi URL chrome:// không?

Không. API tiện ích được thiết kế để giảm thiểu vấn đề về khả năng tương thích ngược có thể phát sinh khi phiên bản mới của trình duyệt được đẩy lên. Việc cho phép tập lệnh nội dung trên URL chrome:// có nghĩa là các nhà phát triển sẽ bắt đầu dựa vào DOM, CSS và JavaScript của các trang này để giữ nguyên. Trong trường hợp tốt nhất, những trang này không thể được cập nhật nhanh như khi chúng đang được cập nhật ngay bây giờ. Trong trường hợp xấu nhất, việc cập nhật một trong các trang này có thể làm hỏng tiện ích, khiến các phần chính của trình duyệt ngừng hoạt động đối với người dùng tiện ích đó.

Lý do chúng tôi cho phép hoàn toàn thay thế nội dung được lưu trữ tại các URL này là vì tính năng này buộc nhà phát triển tiện ích phải triển khai tất cả chức năng họ muốn mà không cần phụ thuộc vào phương thức triển khai nội bộ của trình duyệt để giữ nguyên.

Tiện ích có thể mở cửa sổ bật lên trình duyệt/hành động trên trang mà không cần người dùng tương tác không?

Không, cửa sổ bật lên chỉ có thể mở khi người dùng nhấp vào trang hoặc thao tác tương ứng trên trình duyệt. Một tiện ích không thể mở cửa sổ bật lên theo phương thức lập trình.

Tiện ích có thể giữ cửa sổ bật lên mở sau khi người dùng nhấp ra khỏi chúng không?

Không, cửa sổ bật lên sẽ tự động đóng khi người dùng tập trung vào một số phần của trình duyệt bên ngoài cửa sổ bật lên. Không có cách nào để tiếp tục mở cửa sổ bật lên sau khi người dùng nhấp ra.

Tiện ích có được thông báo khi được cài đặt/gỡ cài đặt không?

Bạn có thể theo dõi sự kiện runtime.onInstalled để nhận thông báo khi tiện ích được cài đặt hoặc cập nhật, hoặc khi chính Chrome được cập nhật. Không có sự kiện tương ứng nào khi bạn gỡ cài đặt tiện ích của mình.

Quá trình phát triển

Làm cách nào để tạo giao diện người dùng cho tiện ích của tôi?

Tiện ích sử dụng HTML và CSS để xác định giao diện người dùng. Vì vậy, bạn có thể sử dụng các đối tượng kiểm soát biểu mẫu chuẩn để xây dựng giao diện người dùng hoặc tạo kiểu cho giao diện bằng CSS, giống như cách bạn thực hiện với một trang web. Ngoài ra, tiện ích có thể thêm một số thành phần có giới hạn trên giao diện người dùng vào chính Chrome.

Tôi có thể lưu trữ bao nhiêu dữ liệu trong localStorage?

Tiện ích có thể lưu trữ tối đa 5 MB dữ liệu trong localStorage.

Làm cách nào để tạo trình đơn tuỳ chọn cho ứng dụng của tôi?

Bạn có thể cho phép người dùng đặt các tuỳ chọn cho tiện ích của mình bằng cách tạo một trang tuỳ chọn. Trang này là một trang HTML đơn giản sẽ được tải khi người dùng nhấp vào nút "tuỳ chọn" cho tiện ích của bạn. Trang này có thể đọc và ghi chế độ cài đặt vào localStorage hoặc thậm chí gửi tuỳ chọn đến máy chủ web để có thể duy trì các chế độ đó trên các trình duyệt.

Nhà phát triển tiện ích có thể sử dụng những công cụ gỡ lỗi nào?

Bạn có thể sử dụng các công cụ dành cho nhà phát triển tích hợp của Chrome để gỡ lỗi tiện ích cũng như trang web. Xem hướng dẫn về gỡ lỗi tiện ích này để biết thêm thông tin.

Tại sao kiểu khớp ký tự đại diện không hoạt động đối với miền cấp cao nhất (TLD)?

Bạn không thể sử dụng các mẫu so khớp theo ký tự đại diện như http://google.*/* để so khớp TLD (như http://google.eshttp://google.fr) do tính phức tạp của việc thực sự giới hạn việc so khớp đó chỉ với những miền mong muốn.

Trong ví dụ về http://google.*/*, các miền của Google sẽ được so khớp, nhưng http://google.someotherdomain.com cũng vậy. Ngoài ra, nhiều trang web không sở hữu tất cả TLD cho miền của họ. Ví dụ: giả sử bạn muốn sử dụng http://example.*/* để so khớp http://example.comhttp://example.es, nhưng http://example.net là một trang web thù địch. Nếu tiện ích của bạn có lỗi, trang web thù địch có thể tấn công tiện ích của bạn để có quyền truy cập vào các đặc quyền cao hơn của tiện ích.

Bạn nên liệt kê rõ ràng các TLD mà bạn muốn chạy phần mở rộng trên đó.

Tại sao API quản lý không kích hoạt các sự kiện khi tiện ích của tôi được cài đặt/gỡ cài đặt?

API quản lý nhằm giúp tạo phần mở rộng thay thế trang thẻ mới. Trình gỡ lỗi không nhằm mục đích kích hoạt các sự kiện cài đặt/gỡ cài đặt cho tiện ích hiện tại.

Làm cách nào để tiện ích xác định xem có đang chạy lần đầu tiên hay không?

Bạn có thể nghe sự kiện runtime.onInstalled. Hãy xem mục Câu hỏi thường gặp này.

Tính năng và lỗi

Tôi nghĩ rằng mình đã phát hiện ra lỗi! Làm thế nào để tôi đảm bảo rằng vấn đề được khắc phục?

Trong khi phát triển một tiện ích, bạn có thể thấy hành vi không phù hợp với tài liệu về tiện ích và có thể là kết quả của một lỗi trong Chrome. Bạn nên gửi báo cáo vấn đề thích hợp và nhóm Chromium có đủ thông tin để tái tạo hành vi đó.

Bạn nên làm theo các bước sau để đảm bảo:

  1. Hãy tìm tiện ích kiểm tra tối thiểu chứng minh vấn đề mà bạn muốn báo cáo. Tiện ích này nên có càng ít mã càng tốt để minh hoạ lỗi – thông thường thì bạn nên dùng tối đa 100 dòng mã. Nhiều lần, các nhà phát triển nhận thấy họ không thể tái hiện các vấn đề của mình theo cách này. Đây là một chỉ báo tốt cho biết lỗi nằm trong mã của chính họ.
  2. Tìm kiếm công cụ theo dõi lỗi tại http://crbug.com để xem có người nào đó đã báo cáo vấn đề tương tự hay chưa. Hầu hết các vấn đề liên quan đến tiện ích đều được gửi theo component=Platform>Tiện ích. Vì vậy, để tìm lỗi tiện ích liên quan đến hàm chrome.tabs.performScript (ví dụ), hãy tìm "component=Platform>Extensions Type=Bug chrome.tabs.executeScript", kết quả sẽ cung cấp cho bạn danh sách kết quả này.
  3. Nếu tìm thấy lỗi mô tả vấn đề của bạn, hãy nhấp vào biểu tượng dấu sao để được thông báo khi lỗi nhận được bản cập nhật. Đừng trả lời lỗi để nói "tôi cũng thế" hay hỏi "khi nào sự cố này sẽ được khắc phục?; những cập nhật như vậy có thể khiến hàng trăm email được gửi đi. Chỉ thêm nhận xét khi bạn có thông tin (chẳng hạn như trường hợp kiểm thử tốt hơn hoặc bản sửa lỗi được đề xuất) có thể hữu ích.
  4. Nếu bạn không tìm thấy lỗi thích hợp để gắn dấu sao, hãy gửi báo cáo vấn đề mới tại http://crbug.com/new. Khi điền vào biểu mẫu này càng rõ ràng càng tốt: chọn một tiêu đề mang tính mô tả, giải thích các bước tái hiện lỗi và mô tả hành vi dự kiến cũng như hành vi thực tế. Đính kèm ví dụ kiểm thử vào báo cáo và thêm ảnh chụp màn hình nếu thích hợp. Báo cáo của bạn càng giúp người khác dễ dàng tái tạo vấn đề của bạn thì cơ hội lỗi sẽ được khắc phục kịp thời càng lớn.
  5. Chờ lỗi được cập nhật. Hầu hết lỗi mới được phân loại trong vòng một tuần, mặc dù đôi khi có thể mất nhiều thời gian hơn để cập nhật. Đừng trả lời lỗi để hỏi khi nào vấn đề sẽ được khắc phục. Nếu lỗi của bạn chưa được sửa đổi sau hai tuần, vui lòng đăng thông báo lên nhóm thảo luận kèm theo đường liên kết đến lỗi của bạn.
  6. Nếu ban đầu bạn đã báo cáo lỗi trên nhóm thảo luận và được chuyển hướng đến mục Câu hỏi thường gặp này, hãy trả lời chuỗi bài đăng ban đầu của bạn kèm theo đường liên kết đến lỗi mà bạn đã gắn dấu sao hoặc báo cáo. Điều này sẽ giúp những người khác gặp phải vấn đề tương tự dễ dàng tìm ra lỗi chính xác hơn.

Tôi có một yêu cầu về tính năng! Tôi có thể báo cáo hành vi đó bằng cách nào?

Nếu bạn xác định một tính năng (đặc biệt nếu tính năng đó liên quan đến API thử nghiệm) có thể được thêm vào để cải thiện trải nghiệm phát triển tiện ích, hãy nhớ gửi yêu cầu thích hợp trong công cụ theo dõi lỗi.

Bạn nên làm theo các bước sau để đảm bảo:

  1. Tìm kiếm công cụ theo dõi lỗi tại http://crbug.com để xem có người nào đó đã yêu cầu tính năng tương tự hay không. Hầu hết các yêu cầu liên quan đến tiện ích đều được gửi theo component=Platform>Tiện ích. Vì vậy, để tìm yêu cầu tính năng tiện ích liên quan đến phím tắt (ví dụ:), hãy tìm "component=Platform>Extensions Type=Feature shortcuts" và bạn sẽ nhận được danh sách kết quả này.
  2. Nếu tìm thấy một phiếu yêu cầu hỗ trợ khớp với yêu cầu của bạn, hãy nhấp vào biểu tượng dấu sao để nhận thông báo khi lỗi nhận được thông tin cập nhật. Đừng phản hồi lỗi để nói "tôi cũng vậy" hay hỏi "khi nào việc này sẽ được triển khai?; những cập nhật như vậy có thể khiến hàng trăm email được gửi đi.
  3. Nếu bạn không tìm thấy phiếu yêu cầu hỗ trợ thích hợp để gắn dấu sao, hãy gửi yêu cầu mới tại http://crbug.com/new. Khi điền vào biểu mẫu này, hãy mô tả chi tiết nhất có thể: chọn một tiêu đề mang tính mô tả và giải thích chính xác tính năng bạn muốn sử dụng cũng như cách bạn dự định sử dụng tính năng đó.
  4. Chờ phiếu yêu cầu hỗ trợ được cập nhật. Hầu hết các yêu cầu mới được phân loại trong vòng một tuần, mặc dù đôi khi có thể mất nhiều thời gian hơn để cập nhật. Đừng trả lời phiếu yêu cầu hỗ trợ để hỏi thời điểm sẽ thêm tính năng. Nếu phiếu yêu cầu hỗ trợ của bạn chưa được sửa đổi sau hai tuần, vui lòng gửi thông báo lên nhóm thảo luận kèm theo đường liên kết đến yêu cầu của bạn.
  5. Nếu ban đầu bạn báo cáo yêu cầu của mình trên nhóm thảo luận và được chuyển hướng đến mục Câu hỏi thường gặp này, hãy trả lời chuỗi thư ban đầu của bạn kèm theo đường liên kết đến phiếu yêu cầu hỗ trợ mà bạn đã gắn dấu sao hoặc mở. Điều này sẽ giúp những người có cùng yêu cầu dễ dàng tìm được vé chính xác hơn.