Rolf B: Tampermonkey: Neues Tag einfügen

Beitrag lesen

Hallo mumpel,

die grundsätzliche Strategie hatte ich ja aufgeschrieben; wie du sie in den Tampermonkey einbringst ist natürlich ein weiteres Thema. Da ich das Äffchen bisher nicht verwendet habe, habe ich da keine Erfahrung.

Verwendest Du eigentlich Firefox? Weil - wenn nicht, funktioniert contextmenu nicht. Dieses Attribut war mal auf dem Weg in den Standard, aber weil es nur von Firefox implementiert wurde, gilt als mittlerweile als missbilligt.

In deinem Code sehe ich folgende Probleme:

  • Deine Experimentierfunktion setTest erzeugt eine Variable el, verwendet sie im darauf folgenden alert() aber nicht. Statt dessen steht da test, ohne Anführungszeichen, und die Deklaration einer Variablen dieses Namens fehlt. Das mag den out-of-scope Fehler erklären. Welche Variable genau wird da eigentlich als fehlend angemeckert?

  • Ob „Script im String“ der beste Weg ist, um deinen Menü-Eventhandler unterzubringen, weiß ich nicht. Ist das durch Tampermonkey zwingend bedingt?

  • Das Menü musst Du nur einmal erzeugen, nicht einmal pro img. Das ist auch ganz praktisch so, weil Du Dir sonst für jedes Bild eine eigene ID für das zugehörige Menü ausdenken müsstest. Das Erzeugen des Menü kannst Du im gleichen Script-Teil machen, in dem Du das Script ins DOM hängst.

  • Du versuchst immer noch, einem img ein Kind anzuhängen. LASS DAS. Bilder sind unfruchtbar. Sie bekommen keine Kinder. Du musst lediglich für den img-Node die contextMenu Eigenschaft setzen.

  • Es geht die Mär, dass eine Funktion einen Eingang und einen Ausgang haben muss, alles andere sei schlechter Stil. Aber sag mir: was ist besser: Ein Einrückungsgebirge, wie bei Dir, oder das hier. Da Du Tampermonkey verwendest, wird der Code für FF oder Chrome sein, also kann man neueres Ecmascript verwenden...

function(mutations) {
   if (!mutations[0].addedNodes.length) return;

   let hasAddedH4 = true; // bzw. Ergebnis einer h4 Ermittlung
   if (!hasAddedH4) return;

   // querySelectorAll liefert IMMER eine NodeList
   document.querySelectorAll("img").forEach(bild => bild.contextMenu = "myCtxMenu");
}

Rolf

--
sumpsi - posui - clusi