Wie benutzt man das Clipboard unter JavaScript?

  • Durch Kommentar von bandit, jetzt auch noch hier:

    Gestern stieß ich auf ein kleines Problem:

    Ich schreibe an einem WYSIWYG-Editor. Die Eingabe funktioniert rein über JavaScript. Aber: Wie kann ich eine Paste-Funktion einbauen?
    JavaScript ist auf den Browser begrenzt. Das Clipboard (Strg + C; Strg + V) geht darüber hinaus und ist wegen Sicherheitsgründen für JavaScript gesperrt.
    Aber wie greife ich jetzt darauf zu?

    Nach kurzem Nachdenken fiel mir ein, dass Textfelder Strg + V unterstützen. Also entschied ich mich, dieses zu "missbrauchen"

    Vorbereitung

    Die Funktion des WYSIWYG-Editors benutzt folgende HTML-Struktur:

    HTML
    <div class="WYSIWYG_Area">
        <div id="WYSIWYG_test" class="WYSIWYG_Editor" onclick="WYSIWYG_Activate_Editor()">
        </div>
        <form>
            <textarea id="WYSIWYG_Paste_Area" class="WYSIWYG_Paste_Area" />
        </form>
    </div>

    Genauer möchte ich nicht darauf eingehen: Die Grundfunktion ist einfach: Bei einem Klick wird der DIV "aktiviert". Und alle Eingaben werden im Hintergrund berechnet und in den DIV geschrieben.

    Die Funktion benötigt 3 Dateien:

    HTML
    <script type="text/javascript" src="js.php"></script>
        <script type="text/javascript" src="WYSIWYG.js"></script>
        <link type="text/css" rel="stylesheet" href="WYSIWYG.css" />

    Die Browserweichen

    Die einfachste ist js.php:

    Dieses PHP-Script liest einfach den Browser aus und gibt ihn an JS weiter.

    Der Style

    Der Style wird in WYSIWYG.css definiert:

    Diese Script versteckt die Textarea hinter dem DIV. Der DIV ist größer und liegt im z-index über der Textarea. Sie sind über "position:absolute;" hintereinander positioniert.

    Die eigentliche Funktion

    Im folgenden Script wird nun die eigentliche Funktion ausgeführt. Ich behandle jedoch nur die Paste-Funktion. Die Browserweichen würden den Rahmen hier sprengen. Die Funktion so funktioniert in Firefox.

    Zuerst müssen die Texteingaben verarbeitet werden:

    Code
    document.onkeypress = WYSIWYG_Enter_Key;

    Jeder Testendruck runft nun WYSIWYG_Enter_Key() auf. Die Funktion sieht so aus:

    Hier wird abgefragt, ob die Steuerungstaste (e.ctrlKey) und V abgefragt. Siend diese beiden Tasten gedrückt, wird das (versteckte) textfeld aktiviert und ein Timer von 50 ms gestartet. Nach dieser Zeit wird folgende Funktion aufgerufen:

    Code
    function WYSIWYG_Get_Paste()
    {
        WYSIWYG_appendText(document.getElementById("WYSIWYG_Paste_Area").value);
            document.getElementById("WYSIWYG_Paste_Area").value = "";
        document.getElementById("WYSIWYG_Paste_Area").blur();
    }

    Nach den 50 ms wird einfach der Inhalt dieses Textfeldes abgefragt und mittels WYSIWYG_appendText() (oder einer anderen Funktion ;)) verarbeitet.
    Dann wird der Inhalt gelöscht und das Textfeld deaktiviert.

    So, das war meine neueste kranke Programmier-Erfahrung.
    Ich hoffe, sie wird irgendjemandem, der dies liest helfen. :)

    Something big is coming. And there will be pirates and ninjas and unicorns...

    Einmal editiert, zuletzt von Dodo (11. Januar 2010 um 18:39)

  • Wenn ich mich nicht irre, gits auch den Eventhandler "oncopynpaste" (oder so ;)). Damit könntest du das so regeln:

    HTML
    <body oncopynpaste="focusiere_paste_textarea_dann_schreibe_text_in_Editor();">

    Bin mir aber echt nicht sicher. Coole sache, das Skript.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • ich hab mich grad ein bisschen erkundet.
    es gibt nen handler für textfelder "onpaste" ("onbeforepaste").
    Aber der ist nur unter IE verfügbar

    Something big is coming. And there will be pirates and ninjas and unicorns...