2016-09-23 6 views
0

Ich versuche entfernen Sie alle Link-Elemente mit einem rel-Tag von "Stylesheet" mit node.removeChild von einer Webseite, aber es wird nicht funktionieren. Ich weiß, dass Chrome-Erweiterungen aus Sicherheitsgründen einige Einschränkungen haben, aber ich finde nicht, ob dieses Problem durch diese Einschränkungen verursacht wird oder nicht.removeChild funktioniert nicht in Chrome-Erweiterung

Wenn ich log styles[i].parentElement es gibt mir das Körperelement, damit es richtig funktioniert.

Jede Hilfe würde sehr geschätzt werden.

manifest.json:

{ 
"manifest_version": 2, 
"name": "Leho Styler", 
"description": "This extension gives leho a whole new styling to better please the eye.", 
"version": "0.1.0", 
"content_scripts": [ 
    { 
    "matches": [ 
     "https://leho.howest.be/*", 
     "https://leho.howest.be/*/*", 
     "http://leho.howest.be/*", 
     "http://leho.howest.be/*/*" 
    ], 
    "css": [ 
     "reset.css", 
     "leho.css" 
    ], 
    "js": ["leho.js"] 
    } 
] 

}

leho.js (Content-Skript)

var styles = document.getElementsByTagName('link'); 

function init() { 
    for (var i = 0; i < styles.length; i++) { 
     if (styles[i].rel == "stylesheet") { 
      styles[i].parentElement.removeChild(styles[i]); 
     } 
    } 
} 

init(); 

Antwort

0

aller zuerst die Frage an var styles = document.querySelectorAll ("link[rel='stylesheet']") ändern - das bekommt Beseitigen Sie den unnötigen If-Block. Zweitens, sind Sie sicher, dass das DOM geladen ist, wenn init() aufgerufen wird? Rufen Sie dazu anstelle von init direkt die folgende Zeile auf: document.addEventListener ("DOMContentLoaded", init); - dies ruft init auf, sobald das DOM verfügbar ist. Soweit ich weiß, kann dies auch in der Manifest-Datei gemacht werden, obwohl ich nicht weiß, was der Standard ist.

+0

Vielen Dank für die Verwendung von querySelectorAll, da ich nicht daran gedacht habe. Ich habe auch versucht, init auf DOMContentLoaded auszuführen, aber das hat das Problem nicht gelöst. Was es jedoch gelöst hat, ist die Verwendung von "run_at": "document_end" im Manifest, wie Sie es vorgeschlagen haben. Laut Google: _ "Im Fall von" document_end "werden die Dateien unmittelbar nach dem DOM-Abschluss eingefügt, aber bevor Subressourcen wie Bilder und Frames geladen wurden." _ [Chrome Content Scripts-Referenz] (https: // developer. chrome.com/extensions/content_scripts) Jetzt funktioniert alles wie gewünscht. Danke @NikxDa für die Hilfe! –

Verwandte Themen