Google chrome extension Google Chrome:在“中更新扩展”;“开发模式”;(本地)从用户脚本
我为Google Chrome创建了一个扩展,它为指定的网页运行一个小的用户脚本,并通过background.js向Chrome API(比如Chrome.tabs和其他)发出一些请求 现在,我正在“开发人员模式”下对其进行本地测试,如下所示:Google chrome extension Google Chrome:在“中更新扩展”;“开发模式”;(本地)从用户脚本,google-chrome-extension,Google Chrome Extension,我为Google Chrome创建了一个扩展,它为指定的网页运行一个小的用户脚本,并通过background.js向Chrome API(比如Chrome.tabs和其他)发出一些请求 现在,我正在“开发人员模式”下对其进行本地测试,如下所示: 我编辑我的userscript.js和background.js 然后我转到chrome://extensions在Google Chrome中的选项卡,并从本地D:\my extension文件夹手动重新加载(CTR+R)我的分机 最后,我切换到带有指
由于我是一名初学者,在扩展和userscript开始按预期工作之前,必须对userscript.js和background.js进行大量更改。 因此,在测试过程中,这个过程需要在扩展和页面标签之间进行大量单调的切换 想法是:
最好在测试用户脚本的页面上添加一个按钮或快捷键,并在我的用户脚本中附加一种“更新\扩展\和\重新加载\页面”功能,这样每当我单击此按钮时,它都会从本地文件夹D:\我的扩展名,然后再从页面重新加载中调用扩展名更新。(另一种选择是将“更新扩展名”和“重新加载页面”功能分配给扩展名的浏览器操作图标。) 现在,我只是感兴趣:
是否有任何类型的“chrome.extesion.update”方法,以便我可以通过background.js从我的userscript.js向它发出请求,并调用扩展的自动重新加载(在“开发人员模式”下),而无需转到chrome://extensions选项卡 这就是你要找的吗 功劳消失
通过调用,扩展可以重新加载自身,因此只需触发扩展即可 以下代码将以下功能附加到浏览器操作按钮:
...
"browser_action": {
"default_title": "Reload"
// "default_icon": {
// "19": "img/icon19.png",
// "38": "img/icon38.png"
// },
},
...
...
"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"
}
...
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();
...
...
#reload-btn { position: fixed; top: 0; right: 0; } /* or any other position on the page */
...
...
$("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");
});
...
...
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();
...
关于如何自动重新加载过程,请参见。稍微修改了上述内容,以调用重新加载扩展,然后重新加载正在执行内容脚本(userscript.js)的选项卡,所有操作都由“重新加载btn按钮触发(如果浏览器操作图标被popup.html占据) manifest.json
...
"browser_action": {
"default_title": "Reload"
// "default_icon": {
// "19": "img/icon19.png",
// "38": "img/icon38.png"
// },
},
...
...
"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
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();
...
...
#reload-btn { position: fixed; top: 0; right: 0; } /* or any other position on the page */
...
...
$("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");
});
...
...
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();
...
userscript.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();
...
...
#reload-btn { position: fixed; top: 0; right: 0; } /* or any other position on the page */
...
...
$("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");
});
...
...
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();
...
可能的重复我不认为这是一个多大的重复:这是一个关于重新加载扩展与活动标签。另一个是关于“保存时”自动重新加载扩展。此外,对这个问题应用公认的答案意味着重新加载所有未打包的扩展,并需要额外的“单击”来重新加载活动页面。