我一直在尝试制作一个带有图标的扩展程序,点击后会停止(所有)标签加载。
我有这个清单文件:
{
"name": "Stop Loading",
"version": "1.0",
"manifest_version": 2,
"description": "Stop loading all tabs in Chrome",
"browser_action": {
"default_icon": "greyclose.png"
},
"background_page": "background.html",
"content_scripts": [ {
"all_frames": true,
"js": [ "kliknuto.js" ],
"matches": [ "http://*/*", "https://*/*" ]
} ],
"permissions": [ "tabs", "http://*/*", "https://*/*" ]
}
在background.html中我有这段代码:
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.extension.sendRequest({reqtype: "get-settings"}, function(response) {
window.setTimeout("window.stop();", 0);
});
});
我不确定我是否应该将background.html代码放入javascript文件“kliknuto.js”或其他内容。单击Chrome中的扩展程序按钮时会调用哪个功能? 感谢您的时间和帮助。
答案 0 :(得分:0)
在您的代码中,background.html正在向自己发送查询(chrome.extension.sendRequest
不会发送到内容脚本),然后,如果/当它收到回复时,后台页面正在调用{{1} } 本身,而不是标签。你真正需要的是:
<强> background.html 强>:
window.stop()
此解决方案使用...
chrome.browserAction.onClicked.addListener(function(tab) {
// get all tabs in all windows
chrome.windows.getAll({"populate":true}, function(winArray) {
for(var i = 0; i < winArray.length; ++i) {
for(var j = 0; j < winArray[i].tabs.length; ++j) {
var t = winArray[i].tabs[j];
// push code to each tab
chrome.tabs.executeScript(t.id, {"code":"window.stop();", "allFrames":"true"});
}
}
});
});
...
代替内容脚本。
使用替代解决方案进行编辑:
将内容脚本附加到每个标签,用于侦听来自背景页面的订单。
<强> background.html 强>:
executeScript
<强> kliknuto.js:强>
...
chrome.browserAction.onClicked.addListener(function(tab) {
// get all tabs in all windows
chrome.windows.getAll({"populate":true}, function(winArray) {
for(var i = 0; i < winArray.length; ++i) {
for(var j = 0; j < winArray[i].tabs.length; ++j) {
var t = winArray[i].tabs[j];
// push code to each tab
chrome.tabs.sendRequest(t.id, {"order":"stop"});
}
}
});
});
...
确保将chrome.extension.onRequest(function(request) {
if(request.order == "stop") {
window.stop();
}
});
添加到清单中的"run_at":"document_start"
块,以便内容脚本尽快开始收听。