JS-Problem mit 2 Ext (merge)

  • Ihr kennt alle die Ext's BBcode und Signature...

    Es ist machbar, beide zu kombinieren - ist eine Spielerei von mir.

    Ursprung ist bbcode 0.1.2 und Signature 0.1

    Es geht um dieses Script:

    und dieses Overlay:

    In den Optionen ist noch alles klar, wird angezeigt, editiert blubb.
    Lediglich im Kontextmenü ist es gähnend leer, ich kann dort nur die Optionen aufrufen.

    Ich vermute, dass das JS mit der Struktur des bbcode-Menüs nicht
    konform geht und daher den richtigen Einsprung nicht findet (also
    leer bleibt) - das Sig-Menü steht ja jetzt eine Hierarchie weiter "unten"
    (in bbcode ja jetzt):

    alt (bzw getrennte exts)
    - bbcode
    - signature
    |- sig1 (usw)
    |- Optionen

    neu
    - bbcode
    |- signature
    . |- (leer)
    . |- Optionen

    Verschiedene Versuche mit den Overlay/JS sind gescheitert.

    Wer kann mir helfen, ich bin JS Laie - danke !

  • Ist mir recht 4711 :)

    Henne.
    Ich merge die Funktionen von BBcode und Signature.

    Die Hierarchie habe ich oben schon mal dargestellt.
    Problem ist jetzt nur, dass ich unter BBcode keine erstellen Signaturen sehe, wohl aber in Signature.
    Von daher vermute ich halt, dass das JS aus Signature die Struktur in
    BBcode nicht erkennt und deshalb nichts reinstellt.
    Als Laie ist das nicht so einfach zu erkennen, aus meiner Sicht ist alles Mögliche ausgeschöpft.

    Hier das Bild dazu, was nicht geht.
    [Blockierte Grafik: http://people.freenet.de/brummelchen2003a/becky/bbcode_sig.gif]

  • Da schau ich sofort mal nach...

    So sieht's aus, evtl habe ich da oben was vergessen zu posten (menupopup)...

  • Zitat von Brummelchen

    ...evtl habe ich da oben was vergessen zu posten (menupopup)...

    Evtl. oder tatsächlich? ;)

    Schick mir mal bitte das gesamte Paket.

  • Wenn denn eine Signatur vorhanden ist, wird diese auch im Kontextmenü angezeigt.

    options.xul:

    Code
    <script
        type="application/x-javascript"
        src="chrome://bbcode/content/signatureOverlay.js">
    </script>

    Das produziert natürlich einen Fehler, da "signatureOverlay.js" für ein
    Browserfenster geschrieben wurde und es "contentAreaContextMenu" im
    Optionsfenster nicht gibt. Ist auch nicht nötig, da das Kontextmenü bei jedem
    "popupshowing" aktualisiert wird.

  • Es tut jedenfalls das, was du erreichen willst. Das Menü bleibt
    bei mir NICHT leer. (Wenn eine Sig vorher angelegt wurde...)

    Das Einbinden von "signatureOverlay.js" in "options.xul" ist falsch.
    "options.xul" ist ein eigenes Fenster, welches mit dem Browser
    erstmal nichts zu tun hat.
    Erweiterungen "klinken" sich meistens nur in spezielle Fenster
    ein, im Falle von "signatureOverlay.js" (über "bbcodeOverlay.xul") wäre dies
    "chrome://browser/content/browser.xul" (Firefox) und
    "chrome://navigator/content/navigator.xul" (Seamonkey/aka Mozilla Suite)
    (siehe "contents.rdf")

    Im "Standard-Browser-Fenster" trägt das Kontextmenü für die
    angezeigte Seite die ID "contentAreaContextMenu". Da für "options.xul"
    überhaupt kein Kontextmenü existiert und besonders nicht "contentAreaContextMenu",
    kann es nicht funktionieren.
    (Das Signature-Untermenü ist Bestandteil von "contentAreaContextMenu")

    Öffne mal "about:config" über die Addresszeile und änder
    "javascript:options:ShowInConsole" und
    "javascript:options:strict" jeweils in "true".

    Spätestens danach sollte der Fehler in der JavaScript-Konsole
    angezeigt werden, wenn "options.xul" geöffnet wird.

    "document.getElementById("contentAreaContextMenu").addEventListener("popupshowing",sig_menuPopup,false);"

    bewirkt, dass bei JEDEM Öffnen des Kontextmenüs "contentAreaContextMenu" die Funktion
    "sig_menuPopup" aufgerufen wird.
    Ist der Cursor in einem Eingabefeld, wird die Funktion "sig_setMenu" aufgerufen.
    "gContextMenu" ist eine globale Variable von Mozilla.

  • Da kommt nichts mit options.xul, nur das hier:

    Code
    Fehler: document.getElementById("contentAreaContextMenu") has no properties
    Quelldatei: chrome://bbcode/content/signatureOverlay.js
    Zeile: 10

    Besagt aber in etwa, was du meinst, dass genau jenes Fenster nicht gefunden wird.
    War auch meine Vermutung (siehe oben), habe aber zuwenig Ahnung. wie
    ich das fokussieren kann.

    Zeile 10, hmm

    Code
    //add listener to generate the menu
    function sig_windowLoad(){
      document.getElementById("contentAreaContextMenu")
        .addEventListener("popupshowing",sig_menuPopup,false);
    
    
      
    }

    Müsste bzw könnte ich hier irgendwie was schrauben, um das obige zu erreichen (Fokus) ?

    bbcode machts ja so ähnlich

    Code
    init: function() {
    		var menu = document.getElementById('contentAreaContextMenu');
    		menu.addEventListener('popupshowing', bbcode.showHide, false);
    	},
    	showHide: function() {
    		document.getElementById('context-bbcode').hidden = document.getElementById('context-undo').hidden;
    	},

    PS das Original erzeugt denselben Fehler bei mir.