我的擴展在特定網站中工作,並且我希望用戶知道它的工作時間。 在清單我的內容腳本,我指定的特定頁面,當擴展的內容腳本處於活動狀態時設置圖標
我如何改變我的擴展圖標時的內容腳本是積極?
(編輯從作者的評論)
雖然我的應用程序將特定頁面上的工作,我仍然希望用戶能夠查看彈出。
我的擴展在特定網站中工作,並且我希望用戶知道它的工作時間。 在清單我的內容腳本,我指定的特定頁面,當擴展的內容腳本處於活動狀態時設置圖標
我如何改變我的擴展圖標時的內容腳本是積極?
(編輯從作者的評論)
雖然我的應用程序將特定頁面上的工作,我仍然希望用戶能夠查看彈出。
我爲我的擴展Grooveshark Control實施。這很簡單。我將腳本注入到了我需要的頁面中,並從該注入的腳本中週期性地用一些數據調用我的擴展。
// content.js
setInterval(dataCollector, 1000)
function dataCollector() {
data = {} // collect something from page
chrome.extension.sendRequest(data);
}
而且在我的分機我只是聽爲...
// background.js
chrome.extension.onRequest.addListener(function(request) {
chrome.browserAction.setIcon(...)
})
但有了這個,你可以有一些麻煩。例如,某人可以禁用並再次啓用您的擴展。然後,content.js
也註冊responseCallback
,您將刪除該區間。因爲那樣會有兩個請求。這個問題主要是在開發過程中,當你需要重新加載你的擴展。
另一件事是,用戶可以與您的網頁關閉標籤,現在你需要再次修改你的圖標。對於您需要使用其他聽衆在background.js
腳本:
// background.js
chrome.tabs.onRemoved.addListener(function(tabId, removeInfo) {
// check if your page is still there
// if not, change icon
})
的Grooveshark控制的代碼是在GitHub上,這樣你就可以檢查出來:
Hope th at你正在尋找的東西。
儘管意識形態正確,但這不是一個好的答案,因爲它沒有回答OP真正具有的問題。如果有人可以提供一個強大的解決方案來更改特定頁面的瀏覽器操作圖標,那將是值得歡迎的。
根據Chrome用戶界面指南,如果擴展程序僅適用於特定網站,則應使用Page Action。
最直接的解決方案是從內容腳本將消息發送給後臺腳本,爲特定的標籤頁面的動作,並報告點擊回標籤:
// content.js
chrome.runtime.sendMessage({showAction : true});
chrome.runtime.onMessage.addListener(
function(message, sender, sendResponse) {
if(message.actionClicked) {
/* Do stuff */
}
}
);
// background.js
chrome.runtime.onMessage.addListener(
function(message, sender, sendResponse) {
if(message.showAction) {
chrome.pageAction.show(sender.tab.id);
}
}
);
chrome.pageAction.onClicked.addListener(function(tab) {
chrome.tabs.sendMessage(tab.id, {actionClicked : true});
});
您需要將必需的字段添加到清單,但這是它的要點。
你也可以考慮另一條路線:不是每次注入腳本,檢測要注入與declarativeContent
API顯示頁面操作頁面,並點擊程序注入。這樣可以節省一些資源,但如果您需要在頁面上進行準備工作,則不適用。
感謝您的回覆,抱歉不提這一點 - 雖然我的應用程序將在特定頁面上工作,但我仍然希望用戶能夠查看彈出窗口,如果該應用程序是頁面操作,這可能嗎? – ishayle 2014-09-26 04:07:29
不,你可能會想堅持'browserAction'。您仍然可以從內容腳本發送消息,並在後臺腳本中使用'chrome.browserAction.setIcon({tabId:sender.tab.id,path:「yourSpecialIcon.png」})' – Xan 2014-09-26 09:38:49
嗯,但那麼有一個航行的問題。 – Xan 2014-09-26 09:40:34