2014-01-19 29 views
1

我爲Google Chrome創建了一個擴展,它爲指定的網頁運行一個小的userscript,並通過background.js向chrome API如chrome.tabs等)。谷歌Chrome瀏覽器:更新擴展名爲「Developer mode」(本地)from userscript

現在

,我在本地 「開發模式」 像這樣測試它:

  1. 編輯我userscript.jsbackground.js;
  2. 然後我去鉻://擴展標籤在谷歌Chrome和手動加載(CTR + R)從本地d我的分機:\我的擴展文件夾。
  3. 最後,我切換到帶有指定網頁的選項卡並重新加載它以查看更改。

的問題是:
因爲我是個初學者,有很多的變化,必須把我的userscript.jsbackground.js我的分機之前預期userscript開始工作。 所以,這個過程在測試時涉及擴展和頁面標籤之間的單調切換。

的理念是:
這將是很好添加一個按鈕或在userscript正在測試頁面上的快捷鍵和附加排序在我userscript「update_extension_and_reload_page」功能給它,讓伊芙時間當我點擊這個按鈕時,它會從本地文件夾D:\ my-extension調用擴展更新,然後再調用頁面重新加載。 (另一種方法是這樣的「update_extension_and_reload_page」功能分配給分機的browser_action圖標)

現在

,我只是感興趣:
有任何形式的「chrome.extesion.update」的方法,這樣我就可以向我的userscript.js通過background.js向其發送請求,並且無需進入chrome:// extensions選項卡即可自動重新加載擴展名(在「Developer mode」中)。

+0

可能重複[我怎樣自動重新加載Chrome擴展我發展?](http://stackoverflow.com/questions/2963260/how-do-i-auto -reload-a-chrome-extension-im-developing) – rsanchez

+0

我認爲它不是很重複:這一個是關於重新加載擴展和活動標籤。另一個是關於自動擴展重新加載「保存」。此外,將接受的答案應用於此問題將意味着重新加載** all **未打包的擴展名並需要額外的「點擊」才能重新加載活動頁面。 – gkalpak

回答

1

擴展名可以自動重新加載,通過調用chrome.runtime.reload(),所以它的觸發擴展做的事。

下面的代碼附加以下功能的瀏覽器的操作按鈕:

  1. 保持跟蹤活動選項卡的。
  2. 重新加載擴展名。
  3. 重新加載活動選項卡。

manifest.json的

... 
"browser_action": { 
    "default_title": "Reload" 
// "default_icon": { 
//  "19": "img/icon19.png", 
//  "38": "img/icon38.png" 
// }, 
}, 
... 

background.js

chrome.browserAction.onClicked.addListener(function (tab) { 
    localStorage.tabToReload = tab.id; 
    chrome.runtime.reload(); 
}); 

function reloadTab() { 
    var tabID = localStorage.tabToReload; 
    if (tabID) { 
     chrome.tabs.reload(parseInt(tabID)); 
     delete(localStorage.tabToReload); 
    } 
} 
reloadTab(); 
... 

還參見this answer關於如何自動重新加載過程

1

稍微修改上述ExpertSystem's code調用分機,接着在正在執行的內容的腳本(userscript.js)標籤的重載的重載,全部由#重載-BTN按鈕來觸發(在情況下browser_action圖標被佔用與popup.html)。

的manifest.json

... 
"background":{ "scripts": ["background.js"]}, 

"content_scripts" : [{ 
     "matches" : ["https://stackoverflow.com/*"], 
     "css": ["userscript.css"],   
     "js": ["jquery-latest.min.js", "userscript.js"], 
     "run_at":"document_end" 
}], 

"web_accessible_resources": ["jquery-latest.min.map"], 

"permissions": ["tabs"], 

"browser_action": { 
    "default_icon": "icon19.png", 
    "default_title": "My Extension Title", 
    "default_popup": "popup.html" 
} 
... 

userscript.css

... 
#reload-btn { position: fixed; top: 0; right: 0; } /* or any other position on the page */ 
... 

userscript.js

... 
$("body").prepend("<button id='reload-btn'>reload extension + page reload</button>"); // some shortcut key can be additionally assigned to this button 

$("#reload-btn").on("click", function() { 
    chrome.runtime.sendMessage("please, reload me"); 
}); 
... 

background.js

... 
chrome.runtime.onMessage.addListener(
    function(message, sender) { 
     if (message == "please, reload me"){ 
      localStorage.tabToReload = sender.tab.id; 
      chrome.runtime.reload(); 
    } 
}); 

function reloadTab() { 
    var tabID = localStorage.tabToReload; 
    if (tabID) { 
     chrome.tabs.reload(parseInt(tabID)); 
     delete(localStorage.tabToReload); 
    } 
} 

reloadTab(); 
...