Verschillen in ENTER op FireFox (<br /> / IE (<p>) in Iframe

Pagina: 1
Acties:

  • The.Terminator
  • Registratie: November 2002
  • Laatst online: 23:22

The.Terminator

Un boer met bier

Topicstarter
Heb het volgende probleem.

Ik zet een iframe in designmode en dit werkt, kan in IE en in FF tekst typen.
Alleen bij een ENTER geeft FF een <br /> en IE een <p></p> tag.

Ik wil dit graag voor beide browser gelijk hebben.
Na veel te gelezen hebben kom ik alleen op oplossing die van IE's <p> tag een <br /> tag maakt
Alleen ik wil het andersom :)

Dus dat FF's <br /> tag een <p></p> word en dit blijkt nogal lastig te zijn.
Ik kwam op de Mozilla Dev site op het commando "execCommand('insertbronreturn', false, true);"

Alleen krijg ik dit niet werkend in FF 8)7

  • Roytoch
  • Registratie: November 2007
  • Laatst online: 18-11 12:49

Roytoch

Nietes

In ie krijg je met shift-enter toch ook een br? En je zou in theorie in de code de boel kunnen veranderen? Ik denk ook dat dit topic snel naar web gaat trouwens, maar 'designmode' > welk programma? Frontpage ofzo?

Welles


  • The.Terminator
  • Registratie: November 2002
  • Laatst online: 23:22

The.Terminator

Un boer met bier

Topicstarter
Volgens mij is het toch echt Javascript > dus programmeren (en geen Frontpage), maar dat kan ik fout hebben :)
Voor de duidelijkheid, het is voor een WYSIWYG editor.

Idd, met Shift + Enter krijg je een <br /> in het Iframe, alleen wil ik het IE (en ook Office 2007) gedrag naar FF hebben en dat lukt niet.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • The.Terminator
  • Registratie: November 2002
  • Laatst online: 23:22

The.Terminator

Un boer met bier

Topicstarter
Oeps, excuses roy.ahuis
Je hebt gelijk, 1 van de crewleden even een move doen ?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
*Schopt* >> WEB
...want :? Wat heb je al geprobeerd? Heb je iets tastbaars dat we kunnen zien?

[ Voor 87% gewijzigd door RobIII op 10-06-2008 11:28 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • The.Terminator
  • Registratie: November 2002
  • Laatst online: 23:22

The.Terminator

Un boer met bier

Topicstarter
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var editor;
var editorframe;
var browser;

function enableEditor() {
    if(window.navigator.appName == "Microsoft Internet Explorer") { 
        browser = "IE";
    }
    if(window.navigator.appName == "Netscape") {    
        browser = "FF";
    }
    else {
        browser = "Unbekannt";
    }

    if (browser==="IE") {
        editorframe = document.frames["editor"];
        editor = editorframe.document;
        editor.designMode = "On";
    }  
    else {
        editorframe = document.getElementById("editor");
        editor = editorframe.contentWindow.document;
        editor.designMode = "On";
        editor.document.execCommand('insertbronreturn', false, true);   
    }
    
}

function CopyEditor() { 
    document.getElementById('fld_description').value = editorframe.contentWindow.document.body.innerHTML;
}


Heb ook al geprobeerd

> editor.execCommand('insertbronreturn', false, true);
> document.getElementById("editor").execCommand('insertbronreturn', false, true);

[ Voor 7% gewijzigd door The.Terminator op 10-06-2008 11:34 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waarom die ranzige browserdetectie? En "insertbronreturn" is bij mijn weten geen geldig command? is dat niet iets FCKEditor-specifieks?

[ Voor 11% gewijzigd door RobIII op 10-06-2008 11:39 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Ik heb hier ook een hele tijd mee geworsteld. Het is een van de meest vervelende problemen bij het maken van een WYSISWG editor.

Ik heb het uiteindelijk opgegeven (project is doodgebloed) maar hier staat nog mijn laatste versie. Daarin is het gedrag van Firefox en Safari gecorrigeerd (Opera is helemaal een ramp).

De functie die doet wat jij wil:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
      //prevent regular <br> insertion
      if (browser!="IE") {
        addEvent(editor,"keydown",handleEnter); //addEvent is een veelgebruikte crossbrowser functie (google)
      }

    //prevent regular <br> insertion in firefox and safari (event listener only added for those browsers in initEditor)
    function handleEnter(e) {
      e = e || document.frames["editorframe"].event;
      if (e.keyCode==13 && !e.shiftKey) {
        if (e.preventDefault) e.preventDefault();
        else e.returnValue = false;
        //split current block upon hard enter        
        performEnter();
      }
      if (e.keyCode==13 && e.shiftKey) {
        if (e.preventDefault) e.preventDefault();
        else e.returnValue = false;
        //insert a break upon soft enter
        var br = editor.createElement('br');
        var range = document.getElementById('editorframe').contentWindow.getSelection().getRangeAt(0);
        range.deleteContents();
        range.insertNode(br);
            range.collapse(false);
        placeCaretInNode(br.parentNode,true);
      } 
    }

    //make W3C browsers behave like IE (i.e. force paragraphs)
    function performEnter() {
        
      //manage selection
      var cph = editor.createElement('div');
      var sel = document.getElementById("editorframe").contentWindow.getSelection();
      var range = sel.getRangeAt(0);
      range.deleteContents();
      range.insertNode(cph);
      range.collapse(false);
      
      //find containing node (e.g. P or H1)
      var topNode = getTopContainerOf(cph);
      
      var secondHalfNode;
      var firstHalfNode;
      var cEl = cph;
      while (cEl.parentNode!=editor.body) {
        
        //place tags around fragments
        var firstClone = cEl.parentNode.cloneNode(false);
        var secondClone = cEl.parentNode.cloneNode(false);
        if (cEl.parentNode.parentNode==editor.body && secondClone.nodeName!="P") {
            secondClone = editor.createElement('p');
        } 
        if (cEl!=cph) firstClone.appendChild(firstHalfNode);
        firstHalfNode = firstClone;
        if (cEl!=cph) secondClone.appendChild(secondHalfNode);
        secondHalfNode = secondClone;
        
        //add siblings to proper fragments
        while (cEl.previousSibling!=undefined) {
            firstHalfNode.insertBefore(cEl.parentNode.removeChild(cEl.previousSibling),firstHalfNode.firstChild);
        }
        while (cEl.nextSibling!=undefined) {
            secondHalfNode.appendChild(cEl.parentNode.removeChild(cEl.nextSibling));
        }    
        cEl = cEl.parentNode;
      }
      
      //replace node by two fragments
      cph.parentNode.removeChild(cph);
      firstHalfNode = fixEmpty(firstHalfNode);
      secondHalfNode = fixEmpty(secondHalfNode);
      editor.body.replaceChild(secondHalfNode,topNode);
      editor.body.insertBefore(firstHalfNode,secondHalfNode);
      placeCaretInNode(secondHalfNode,true);
    }    

    function getTopContainerOf(node) {
      while (node.parentNode.tagName!="BODY") {
        node = node.parentNode;
            }
      return node;
    }

    function fixEmpty(node) {
      if (node.innerHTML.length==0) {
        node.innerHTML = "&nbsp;";
            }
      return node;
    } 


Zoals je ziet moet je bij lege paragrafen weer een nbsp invoegen, anders gebeuren er rare dingen. Die nbsp moet je weer weghalen zodra de gebruiker text gaat typen in de P. Dat is weer niet zo eenvoudig als het klinkt (voor ivm uitzonderingsgevallen).

Geloof me, dit is echt een lastig probleem :P

TabCinema : NiftySplit


  • The.Terminator
  • Registratie: November 2002
  • Laatst online: 23:22

The.Terminator

Un boer met bier

Topicstarter
@RobIII

Ik kijk hier op

http://developer.mozilla.org/en/docs/Midas

PS : finetuning / verwijderen ranzige code komt later ;)

@Bozozo

Mhhhh, idd nu ik je code zie brrrrr :)

  • Roytoch
  • Registratie: November 2007
  • Laatst online: 18-11 12:49

Roytoch

Nietes

Misschien een stomme vraag (ik kan lastig écht inhoudelijk reageren omdat js echt buiten mijn domein ligt) maar wat biedt jouw editor voor voordelen boven fck of tinyfck? Of zitten daar dezelfde problemen in...

Welles


  • H004
  • Registratie: Maart 2006
  • Laatst online: 28-05 19:55
Waarschijnlijk maakt TS de editor zelf, omdat de editors die jij noemt vrij zwaar en groot (bloated) zijn. Zelf programmeren levert een stuk lichtere editor op die (hopelijk, maar blijkbaar dus nog niet :o ) precies doet wat jij wil.

(En daarnaast leer je er ook nog wat van, ook)

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Ik vond het een van de meest leerzame projecten. Je leert veel over het DOM en over het manipuleren van de selectie.

Toch denk ik dat je beter TinyMCE kunt verbouwen naar je eigen wensen (desnoods in de code gaan snoeien) dan zelf een complete (goede) WYSIWYG editor proberen te bouwen.

TabCinema : NiftySplit


  • The.Terminator
  • Registratie: November 2002
  • Laatst online: 23:22

The.Terminator

Un boer met bier

Topicstarter
roy.ahuis schreef op dinsdag 10 juni 2008 @ 16:02:
Misschien een stomme vraag (ik kan lastig écht inhoudelijk reageren omdat js echt buiten mijn domein ligt) maar wat biedt jouw editor voor voordelen boven fck of tinyfck? Of zitten daar dezelfde problemen in...
Omdat zoals al is aangegeven het lichter is (ben alleen de echte standaard opmaak opties nodig) en het feit om de content ook nog eens te controleren op bepaalde voorwaarden (is leeg etc).

Moet toegeven, TinyMCE is zeker een goed alternatief :)

@Bozozo : Ik ben nu ook bezig om TinyMCE een flinke klusbeurt te geven :)

[ Voor 6% gewijzigd door The.Terminator op 11-06-2008 11:49 ]

Pagina: 1