12

Tôi mới sử dụng các tiện ích mở rộng của Google Chrome và tôi đã tạo một trang web cho trang web của chúng tôi để kiểm tra nội dung của trang bạn đang truy cập và căn cứ vào ID của máy chủ (chúng tôi có webfarm với 4 máy ảo). Bây giờ sử dụng ID máy chủ, tôi không thể thay đổi biểu tượng tiện ích mở rộng để hiển thị số ở đó. Tôi đã cố gắng sử dụng:Thay đổi biểu tượng tiện ích mở rộng Chrome

chrome.browserAction.setIcon({ 
    path : folder + icons[2], 
    tabId: tab.id 
}); 

Nhưng tôi nhận được lỗi này: chrome.browserAction is not available: You do not have permission to access this API. Ensure that the required permission or manifest property is included in your manifest.json.

Tôi đã thử googling lỗi và đã được tìm kiếm thông qua các tài liệu, nhưng không thể tìm thấy những gì đang gây ra điều này ...

+0

Bạn đã xác định 'browser_action' chưa trong tệp kê khai của bạn? Thiếu thông tin đó trong tệp kê khai của bạn là điều duy nhất tôi có thể nghĩ là sẽ gây ra lỗi như vậy (ngoài việc sử dụng phiên bản canary/dev/beta của trình duyệt). – apsillers

+0

'" browser_action ": { " default_icon ":" numbers/1green.png ", " default_popup ":" index.html " }' Là những gì tôi có .. – Richard

+0

Tôi đã thử trong "bình thường" của tôi Chrome ở chế độ Dev và trên Canary – Richard

Trả lời

18

Tập lệnh nội dung không có quyền truy cập vào hầu hết các API tiện ích. Thay vào đó, bạn sẽ cần phải sử dụng message passing để cảnh báo về nội dung tập lệnh thông báo cho trang nền về những việc cần làm.

kịch bản nội dung của bạn nên gửi một tin nhắn bằng chrome.runtime.sendMessage, và trang nền nên nghe bằng chrome.runtime.onMessage.addListener:

kịch bản nội dung:

if(shouldChangeIcon) { 
    // send message to background script 
    chrome.runtime.sendMessage({ "newIconPath" : folder + icons[2] }); 
} 

trang Background:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
     // read `newIconPath` from request and read `tab.id` from sender 
     chrome.browserAction.setIcon({ 
      path: request.newIconPath, 
      tabId: sender.tab.id 
     }); 
    }); 
+0

Được rồi, có cách nào tôi có thể theo dõi những gì đang diễn ra trong nền không? Đã thiết lập nó ngay bây giờ, nhưng biểu tượng không thay đổi. Đã có background.js được khai báo trong 'background' và myscript.js là' ​​content_script'. Nội dung trong tệp myscript.js kích hoạt 'console.log()' hoạt động nhưng vẫn có cùng biểu tượng. – Richard

+1

Có lẽ bạn có thể sử dụng [Nơi đọc tin nhắn bảng điều khiển từ background.js trong tiện ích mở rộng của Chrome?] (Http: // stackoverflow.com/a/10258029/710446) – apsillers