Ich habe eine kleine Erweiterung gemacht, um Bilder auf einer Website zu blockieren, die ich über das Popup ein- und ausschalten kann. Ich habe alles außer dem Teil, wo es überprüft, ob es die Bilder blockieren sollte oder nicht. Dies ist, was ich im Moment habe:Wenn Bedingung in background.js nicht funktioniert
manifest.json
{
"manifest_version": 2,
"name": "Name",
"description": "Description",
"version": "1.0",
"icons": { "256": "256icon.png",
"128": "128icon.png",
"64": "64icon.png",
"48": "48icon.png",
"32": "32icon.png",
"16": "16icon.png" },
"browser_action": {
"default_title": "Name",
"default_popup": "popup.html"
},
"background": {
"scripts": [
"background.js"
],
"persistent": true
},
"permissions": [
"webRequest",
"webRequestBlocking",
"activeTab",
"tabs",
"webNavigation",
"management",
"http://*/*",
"https://*/*",
"*://static2.gamekit.com/upload/*"
]
}
popup.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
<link rel="stylesheet" href="popup.css">
</head>
<body>
<script src="popup.js"></script>
<div class="PopUp" id="PopUp">
<div class="onoffswitch">
<input type="checkbox" name="onoffswitch" class="onoffswitch-checkbox" id="myonoffswitch">
<label class="onoffswitch-label" for="myonoffswitch">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
</div>
</body>
</html>
popup.js
document.addEventListener('DOMContentLoaded', function() {
'use strict';
var bg = chrome.extension.getBackgroundPage();
document.getElementById("myonoffswitch").checked = bg.onoffstate;
}); //gets checkbox state from background.js and applies it
function updatecheck() { //onclick function of the checkbox
'use strict';
//puts checkbox state in var (checkstate)
var checkstate = document.getElementById("myonoffswitch").checked;
//sends checkbox state to background.js
chrome.runtime.sendMessage({onoffstate: checkstate}, function (response) {
console.log(response.bg_onoffstate); //response from background.js
});
}
document.addEventListener('DOMContentLoaded', function() {
'use strict';
document.getElementById('myonoffswitch').addEventListener('click', updatecheck);
}); //adds onclick event to checkbox
background.js
var onoffstate;
chrome.runtime.onMessage.addListener(
function (request, sender, sendResponse) {
'use strict';
onoffstate = request.onoffstate; //puts checkbox state from popup.js into var
sendResponse({bg_onoffstate: onoffstate}); //debug response
}
);
if (onoffstate === true) { //check if checkbox is checked
chrome.webRequest.onBeforeRequest.addListener(
function (details) {
'use strict';
return {cancel: true};
},
{urls: ["*://static2.gamekit.com/upload/*"]},
["blocking"] //blocks images
);
}
(Entschuldigung für unordentlichen Code)
Beim Laden der popup.html zieht es den gespeicherten Zustand (true/false) aus dem background.js und wendet es auf das Kontrollkästchen. Wenn Sie das Kontrollkästchen (un) in der popup.html aktivieren, sendet es seinen Status an die background.js. Der gespeicherte Zustand im Hintergrund.js bestimmt dann, ob die Bilder blockiert werden sollen oder nicht. Und hier funktioniert es nicht richtig. Der Code, der die Bilder selbst blockiert, funktioniert von selbst. Aber wenn ich es in die if
Funktion stelle, wird es nicht auslösen. Ich habe versucht, andere Sachen hineinzuschieben, um zu sehen, ob es es ausführen würde, aber es tat es nicht.
Ich habe gesucht, ob ich irgendwo einen Tippfehler hatte, aber nichts gefunden habe. JSLint zeigt auch nichts.
Ich hoffe jemand kann herausfinden, was los ist.
Link zu Dateien für einen leichteren Zugang: Here
Es sieht so aus, als würden Sie Ihre Bedingung treffen, bevor Ihr Listener den Status erhält. Versuchen Sie, var onoffstate mit einer Zeichenfolge zu initialisieren, und drucken Sie dann die Variable var in Ihrem if-Bedingungsblock aus, um festzustellen, ob sie geändert wurde. –
Verschieben Sie das if-Gerät in den Hörer! Oder wickeln Sie es in eine Funktion und rufen Sie die Funktion innerhalb des Ereignis-Listeners auf! –
@ibrahimmahrir, Das hat es funktioniert, danke. Ich kann nicht glauben, dass ich etwas so Einfaches übersehen habe. –