Simon Grimm: Markieren von Text auf Webseite verhindern

Moin Forum!

Meine Herausforderung:
Ich möchte verhindern, dass auf einer Seite Text markiert werden kann

Was ich bisher versucht habe:
google ;)
Ich habe leider keine zufriedenstellende Lösung gefunden.
onselectstart="return false" ist beim IE sicherlich hilfreich, jedoch werden die Seiten hauptsächlich mit Geckos(Mozilla oder Firefox) betrachtet.

Da so ziemlich jede Diskussion über das Thema(die ich bisher gefunden habe) mindestens 2 Jahre alt ist, würde ich mich einfach mal interessieren ob ein gewitzter Entwickler inzwischen eine brauchbare Lösung gefunden hat.

Ich freue mich schon auf Eure Anregungen
MFG Simon Grimm

  1. Guten Morgen.

    Meine Herausforderung:
    Ich möchte verhindern, dass auf einer Seite Text markiert werden kann

    Und jetzt zählen wir gespannt die Sekunden, bis der Erste darauf hinweist, dass jeglicher Versuch,

    • das Kopieren von Bilder,
    • das Kopieren von Text,
    • den Quelltext zu verschlüsseln,

    zum Scheitern verurteilt ist, weil weder die Quelltextansicht, noch die Screenshot-Funktion, noch das Menü -Speichern unter- deaktiviert werden kann :-)

      • das Kopieren von Bilder,
      • das Kopieren von Text,
      • den Quelltext zu verschlüsseln,

      Ist auch nicht geplant. Es soll lediglich das Markieren verhindert werden, nicht mehr(optische Gründe - Verschieben von DIVs).

      1. Hallo!

        Ist auch nicht geplant. Es soll lediglich das Markieren verhindert werden, nicht mehr(optische Gründe - Verschieben von DIVs).

        Zumindest für die Geckos (CSS: -moz-user-select) und IEs (JS: onselectstart)
        sollte das funktionieren:

          
        function noselect() {  
            document.onselectstart = function() { return false; }; //IE  
            document.body.style.MozUserSelect = 'none'; //Moz  
        }  
        
        

        Gruß, Jan

        1. function noselect() {
              document.onselectstart = function() { return false; }; //IE
              document.body.style.MozUserSelect = 'none'; //Moz
          }

            
          Danke für den Tipp, habe es gerade versucht. Die Funktion wird beim body-onload ausgefürht und scheint leider keine Wirkung zu haben.  
            
          ~~~html
            
          <body id="root" onload="init()">  
          
          
            
          function init()  
          {  
              document.onmousemove = moving;  
              document.onmouseup   = release;  
              document.onselectstart = function() { return false; };  
              document.body.style.MozUserSelect = 'none';  
              addRequest("LOAD", "MENU", "", "");  
          }  
          
          

          Könnte das Überschreiben der EventListener onmousemove und onmouseup das Ergebnis beeinträchtigen?

          Zur Vollständigkeit noch die beiden Funktionen moving und release:

            
          function moving(evt)  
          {  
              posx = (IE) ? window.event.clientX : evt.pageX;  
              posy = (IE) ? (window.event.clientY + ieBody.scrollTop) : evt.pageY;  
            
              if (element)  
              {  
                  if (posy > y0 + starty)  
                      element.style.top  = posy - starty + "px";  
                  else  
                      element.style.top = y0 + "px";  
                  if (posx > x0 + startx)  
                      element.style.left = posx - startx + "px";  
                  else  
                      element.style.left = x0 + "px";  
              }  
          }  
            
          function release()  
          {  
              element = null;  
              pressedButton = null;  
              pressed = false;  
              document.body.style.cursor = 'default';  
          }  
          
          
          1. Hallo!

            Könnte das Überschreiben der EventListener onmousemove und onmouseup das Ergebnis beeinträchtigen?

            Nein, an deinem Javascript hängt das nicht, sondern eher daran, dass diese
            verschiebbaren Container wohl absolut positioniert sind.

            Weise die CSS-Eigenschaft bzw. den onselectstart-Handler mal explizit diesen
            Containern zu und nicht dem body bzw. dem document-Element.

            Gruß, Jan

            1. Hallo!

              Könnte das Überschreiben der EventListener onmousemove und onmouseup das Ergebnis beeinträchtigen?

              Nein, an deinem Javascript hängt das nicht, sondern eher daran, dass diese
              verschiebbaren Container wohl absolut positioniert sind.

              Weise die CSS-Eigenschaft bzw. den onselectstart-Handler mal explizit diesen
              Containern zu und nicht dem body bzw. dem document-Element.

              Gruß, Jan

              Ein herzliches DANKESCHÖN, das war die Lösung.

              Habe meinen Code zum Erzeugen von neuen Fenstern entsprechend Deiner Anleitung angepasst und Tests auf Mozilla und Firefox sind gut ausgefallen.

                
                  this.displayWindow = function()  
                  {  
                      var myWindow = document.createElement("div");  
                      myWindow.className = "window";  
                      myWindow.id = this.id;  
                      myWindow.style.top = this.y + "px";  
                      myWindow.style.left = this.x + "px";  
                      myWindow.style.position = "absolute";  
              -->     myWindow.style.MozUserSelect = "none";  
              -->     myWindow.setAttribute("onselectstart", "function() { return false; }");  
                      myWindow.setAttribute("onmousedown", "doFocus('" + this.id + "')");  
                      parent.appendChild(myWindow);  
                      [...]  
                  }  
              
              
              1. Hallo,

                -->     myWindow.setAttribute("onselectstart", "function() { return false; }");
                        myWindow.setAttribute("onmousedown", "doFocus('" + this.id + "')");

                Setze Event-Handler nicht mit setAttribute, sondern auf die beschriebene Weise element.onevent = handler;
                Ansonsten bekommst du in einigen Browsern Probleme. Vor allem wird der erste Befehl nicht funktionieren, der wirft einiges durcheinander. Wenn du ein Attribut notierst, wird JavaScript-Code erwartet, und die function-Expression notiert eine Funktion, führt sie aber nichts aus, also wird beim selectstart-Event vermutlich gar nichts passieren.

                myWindow.onselectstart = function () {...};
                das ginge, da wird ein Funktionsobjekt in der Event-Eigenschaft gespeichert.

                Statt
                myWindow.setAttribute("onmousedown", "doFocus('" + this.id + "')");
                kannst du auch einfach
                myWindow.onmousedown = function () { doFocus(this.id); };
                schreiben.

                Mathias

    1. Hallo!

      Meine Herausforderung:
      Ich möchte verhindern, dass auf einer Seite Text markiert werden kann

      ... und jeder Versuch es Anderen schwerer zu machen birgt Nebenwirkungen für die Barrierefreiheit:

      • als Flash einbinden
      • geschütztes PDF-Dokument
      • ...

      ... aber geht es überhaupt um einen Kopierschutz?

      lg ad

  2. @@Simon Grimm:

    würde ich mich einfach mal interessieren ob ein gewitzter Entwickler inzwischen eine brauchbare Lösung gefunden hat.

    Inzwischen immer noch nicht. Und auch in den nächsten 42 Äonen nicht, denn ein gewitzer Nutzer deaktiviert einfach JavaScript.

    Live long and prosper,
    Gunnar

    --
    Flughafen in Tempelhof
    findet jeder Hempel doof.
    1. ein gewitzer Nutzer deaktiviert einfach JavaScript

      Der bekommt von mir dann einen auf den Deckel :D
      Es ist nur ein bestimmter Nutzerkreis vorgesehen - nur in meinem Betrieb und in dessen Außenstellen und Tochterfirmen.

      1. @@Simon Grimm:

        ein gewitzer Nutzer deaktiviert einfach JavaScript

        Der bekommt von mir dann einen auf den Deckel :D

        Soso.

        Was hat denn deine Suche  nach '+markieren +verhindern' ergeben?

        Live long and prosper,
        Gunnar

        --
        Flughafen in Tempelhof
        findet jeder Hempel doof.
        1. Soso.

          Jaja, bei meinem Projekt handelt es sich um ein Tool zum internen Einsatz. Die Wahl einer Weboberfläche hat spezielle Gründe. Die eingesetzten Browser haben keinen direkten Zugang zum Internet. Ich kann den Usern also ohne Probleme die Aktivierung von Javascript als Bedingung zur Nutzung des Tools abverlangen.

          Was hat denn deine Suche  nach '+markieren +verhindern' ergeben?

          Leider noch nix hilfreiches oder funktionierendes, aber ich suche weiter :)

    2. Hi Gunnar,

      Inzwischen immer noch nicht. Und auch in den nächsten 42 Äonen nicht,

      Du irrst.
      Ich nutze zunehmend eine brandneue Methode mit den folgenden Vorteilen:

      • Text kann nicht markiert oder abgespeichert werden
      • besser noch: Text kann nicht gefunden werden, sprich, durch mögliche Klauer aufgespürt werden
      • die gewünschte Darstellung einschliesslich Schriftart, Zeilenumbrüche etc ist 100% crossbrowser gegeben
      • Eine Verstümmelung des Layouts durch Puristen ist nicht möglich

      Wie das? Ich mache meine Webseiten im Fotoshop und speichere sie einfach als Grafik ab. Super-Sache, und echt zukunfsweisend. Schöner Nebeneffekt: ich brauche nicht mal einen Editor.

      ;-)

      Gruesse, Joachim *trollt_heute*

      --
      Am Ende wird alles gut.
      1. @@Joachim:

        Inzwischen immer noch nicht. Und auch in den nächsten 42 Äonen nicht,
        Du irrst.

        ... auch in den nächsten 42 Äonen nicht. ;-)

        Wie das? Ich mache meine Webseiten im Fotoshop und speichere sie einfach als Grafik ab.

        Und ich nehme meine OCR-Software und erhalte einfach den Text aus deiner Grafik.

        Gruesse, Joachim *trollt_heute*

        Nicht gut genug. ;-)

        Live long and prosper,
        Gunnar

        --
        Flughafen in Tempelhof
        findet jeder Hempel doof.
        1. Hi,

          Und ich nehme meine OCR-Software und erhalte einfach den Text aus deiner Grafik.

          Das ist gemein und gilt nicht. Dann mache ich einfach die Schrift so klein, dass sie nur noch als Balken dargestellt wird. Ätsch!

          Gruesse, Joachim

          --
          Am Ende wird alles gut.
  3. Hallo Simon,

    Moin Forum!

    Meine Herausforderung:
    Ich möchte verhindern, dass auf einer Seite Text markiert werden kann

    schon mal versucht, über die Seite ein absolut positioniertes durchsichtiges DIV zu legen?

    Gruß, Jürgen

    1. schon mal versucht, über die Seite ein absolut positioniertes durchsichtiges DIV zu legen?

      STRG+A, STRG+C, STRG+V

      ausserdem dürfte dann wohl ein problem bestehen, wenn man zb formularfelder füllen möchte oder links klickt ;D

      1. Hallo suit,

        ausserdem dürfte dann wohl ein problem bestehen, wenn man zb formularfelder füllen möchte oder links klickt ;D

        man kann nicht alles haben bzw. es werden nur Teile abgedeckt.

        Gruß, Jürgen