it-swarm.com.de

Redactor Editor Textformat Probleme mit Chrome Version 58

Wir verwenden die Version 10.1.1 von Redactor ( https://imperavi.com/redactor/ ) und wurden aufgrund vieler Abhängigkeiten vom Projekt nicht zu Redactor II migriert.

Vor kurzem stehen wir vor einem sehr seltsamen Problem mit Chrome, Version 58. Folgende Probleme treten auf:

- Fett, kursiv, unterstrichen, sup, sub usw. für ausgewählten Text können nicht formatiert werden

Bitte lassen Sie uns wissen, ob es eine Lösung dafür gibt. Jede Art von Hilfe wäre sehr dankbar.

Update gemäß der akzeptierten Umgehungslösung:

// Provided solution is tested for Redactor version 10.1.1
createMarkers: function()
{
    this.selection.get();

    var node1 = this.selection.getMarker(1);

    this.selection.setMarker(this.range, node1, true);

    if (this.range.collapsed === false) {
        var node2 = this.selection.getMarker(2);
        this.selection.setMarker(this.range, node2, false);

        // Fix for Chrome58 Issues
        if (this.utils.browser('chrome')) {
              this.caret.set(node1, 0, node2, 0);
         }
         // End Chrome58 Issues
    }

    this.savedSel = this.$editor.html();
},
24
Sandeep

Ich glaube, ich habe die Lösung gefunden: Chrome 58 (scheint) setzt die Auswahl manchmal zurück, wenn wir Range.insertNode aufrufen.

Ich schlage vor, die Auswahl wiederherzustellen, wenn der Redactor die Auswahlmarkierungen hinzufügt: In der Funktion createMarkers können Sie unmittelbar nach dem Setzen der Markierung node2 diesen Funktionsaufruf hinzufügen: this.caret.set(node1, 0, node2, 0);

Hier ist die Lösung, die Redactor für concrete5 reparieren sollte (es sollte jedoch auch für andere Projekte funktionieren).

24
Michele Locati

stattdessen in Version 10.2.5

Insgesamt kann man das so machen: SetMarker-Funktion neu schreiben:

   setMarker: function (range, node, type) {
          var nclone = window.getSelection().getRangeAt(0).cloneRange();
          range = range.cloneRange();
          try {
            var selection = window.getSelection();
            range.collapse(type);
            range.insertNode(node);

            selection.removeAllRanges();
            selection.addRange(nclone);
          }
          catch (e)
          {
            this.focus.setStart();
          }
        },

oder fügen Sie ein Update in der createMarkers-Funktion hinzu: // Die bereitgestellte Lösung wurde für Redactor Version 10.1.1 getestet

createMarkers: function()
    {
      this.selection.get();

      var node1 = this.selection.getMarker(1);

      this.selection.setMarker(this.range, node1, true);

      if (this.range.collapsed === false)
      {
        var node2 = this.selection.getMarker(2);
        this.selection.setMarker(this.range, node2, false);

        // Fix for Chrome58 Issues
        if (this.utils.browser('chrome')) {
              this.caret.set(node1, 0, node2, 0);
         }
         // End Chrome58 Issues
      }

      this.savedSel = this.$editor.html();
    },

dies funktioniert und wurde auf Chrome 60 getestet.

1
Alp Altunel

der Originalcode ist in 10.2.2 und 10.2.5 so

    getNodes: function()
                    {
                        this.selection.get();

                        var startNode = this.selection.getNodesMarker(1);
                        var endNode = this.selection.getNodesMarker(2);

                        if (this.range.collapsed === false)
                        {
                            if (window.getSelection) {
                                var sel = window.getSelection();
                                if (sel.rangeCount > 0) {

                                    var range = sel.getRangeAt(0);
                                    var startPointNode = range.startContainer, startOffset = range.startOffset;

                                    var boundaryRange = range.cloneRange();
                                    boundaryRange.collapse(false);
                                    boundaryRange.insertNode(endNode);
                                    boundaryRange.setStart(startPointNode, startOffset);
                                    boundaryRange.collapse(true);
                                    boundaryRange.insertNode(startNode);

                                    // Reselect the original text
                                    range.setStartAfter(startNode);
                                    range.setEndBefore(endNode);
                                    sel.removeAllRanges();
                                    sel.addRange(range);

                                }
                            }
                        }
                        else
                        {
                            this.selection.setNodesMarker(this.range, startNode, true);
                            endNode = startNode;
                        }

how to change it?
0
Alp Altunel