Avatar billede dotnewbi Juniormester
07. maj 2008 - 13:05 Der er 17 kommentarer og
1 løsning

problem med wysiwyg i ei

Hej eksperter,

jeg har en lille wysiwyg, som virker fint i firefox, safari og opera  men ikke i ie6/ie7 ?

sådan her ser min html side ud:
<html>
<head>
        <script type="text/javascript" src="js/wi_editor.js"></script>
        <script type="text/javascript">
        //wi_editor.CreateEditor('1');
        window.onload = function() {wi_editor.CreateEditor('content');};
        </script>
       
</head>
<body>
   
 
<form name="1">
  <textarea name="content" id="content">Dette er en html editor</textarea>

    </form>
 

</body>
</html>

og min javascript fil ser sådan her ud:

var TheEditor;
var rememberContent = "";
var SetEditor="";

wi_editor = {
   
      CreateEditor: function(id) {
       
         
      var doc=document.getElementById(id);
     
      doc.style.display ="none";
     
      var i_id = "editor_" + id;
     
     
   
      if(doc == null) {
            alert("Det er ingen TEXTAREA med id'et :" + id );
            return;
        }
       
       
        if(doc.innerHTML != null && doc.innerHTML != "")
        rememberContent = doc.innerHTML;
       
        var newElm = document.createElement("div");
        newElm.setAttribute( "id", "editor" );
       
        newElm.innerHTML  = "<div id='editor_bar'>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"bold\")'>bold</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"italic\")'>italic</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"underline\")'>underline</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"strikethrough\")'>strikethrough</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"subscript\")'>subscript</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"superscript\")'>superscript</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"justifycenter\")'>justifycenter</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"justifyleft\")'>justifyleft</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"justifyright\")'>justifyright</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"justifyfull\")'>justifyfull</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"selectall\")'>selectall</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"removeformat\")'>removeformat</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"copy\")'>copy</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"cut\")'>cut</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"paste\")'>paste</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"redo\")'>redo</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"undo\")'>undo</div>";
        newElm.innerHTML += "</div><div id='editor_input'>";
        newElm.innerHTML += "<iframe id='"+i_id+"' frameborder='0' style='width:100%;height:300px;'></iframe>";
        newElm.innerHTML += "</div>";
        doc.parentNode.insertBefore(newElm,doc);
     
       
        TheEditor = document.getElementById(i_id).contentWindow.document;
       
        TheEditor.open();
        TheEditor.write(rememberContent);
        TheEditor.close();
       
        TheEditor.designMode = "on";
       
       
             
        },
       
        SelectEdit : function(id){
           
            switch(id) {
           
                case "bold":
                TheEditor.execCommand('bold', false, null);
                break;
               
                case "italic":
                TheEditor.execCommand('italic', false, null);
                break;
               
                case "underline":
                TheEditor.execCommand('underline', false, null);
                break;
               
                case "strikethrough":
                TheEditor.execCommand('strikethrough', false, null);
                break;
               
                case "subscript":
                TheEditor.execCommand('subscript', false, null);
                break;
               
                case "superscript":
                TheEditor.execCommand('superscript', false, null);
                break;
               
               
                case "justifycenter":
                TheEditor.execCommand('justifycenter', false, null);
                break;
               
                case "justifyleft":
                TheEditor.execCommand('justifyleft', false, null);
                break;
               
                case "justifyright":
                TheEditor.execCommand('justifyright', false, null);
                break;
               
                case "justifyfull":
                TheEditor.execCommand('justifyfull', false, null);
                break;
               
                case "selectall":
                TheEditor.execCommand('selectall', false, null);
                break;
               
                case "removeformat":
                TheEditor.execCommand('removeformat', false, null);
                break;
               
                case "copy":
                TheEditor.execCommand('copy', false, null);
                break;
               
                case "cut":
                TheEditor.execCommand('cut', false, null);
                break;
               
                case "paste":
                TheEditor.execCommand('paste', false, null);
                break;
               
                case "undo":
                TheEditor.execCommand('undo', false, null);
                break;
               
                case "redo":
                TheEditor.execCommand('redo', false, null);
                break;
           
               
            }
           
           
        }
       
}
Avatar billede w13 Novice
07. maj 2008 - 13:06 #1
Hvad er problemet i IE?
Avatar billede dotnewbi Juniormester
07. maj 2008 - 13:07 #2
Er den nogle der kan se hvor problemmet er i forhold til at den ikke virker i ie!
Avatar billede dotnewbi Juniormester
07. maj 2008 - 13:09 #3
der sker ingen ting hvis man man maker noget text og klikker på en af funktionerne
, samt at den text der bliver overført fra det oprindelige textarea til iframen bliver placeret underligt?
Avatar billede w13 Novice
07. maj 2008 - 13:20 #4
Kan vi se koden i aktion via et link?
Avatar billede dotnewbi Juniormester
07. maj 2008 - 14:50 #5
i kan se den her wedia.dk/wi_editor/wi_editor.html
Avatar billede w13 Novice
07. maj 2008 - 14:51 #6
Jeg tror bare, du skal sætte fokus i tekstfeltet som det allerførste i funktionen SelectEdit().
Avatar billede dotnewbi Juniormester
07. maj 2008 - 15:13 #7
det virker ikke. men en anden ting af en eller anden grund virker "selectall" som den eneste funktion, men den funktion er jo = men de andre ?
Avatar billede w13 Novice
07. maj 2008 - 15:30 #8
Ja. Men det er jo, fordi f.eks. funktionen "bold" kræver at noget er markeret, for at det kan blive udført.

SelectAll kræver ikke, at noget er markeret - for funktionen skal jo selv markere.

I nedenstående skal du indsætte en fokus-funktion i stedet for *FOKUS*:

        SelectEdit : function(id){

            *FOKUS*
           
            switch(id) {
           
                case "bold":
                TheEditor.execCommand('bold', false, null);
                break;
               
                case "italic":
                TheEditor.execCommand('italic', false, null);
                break;
               
                case "underline":
                TheEditor.execCommand('underline', false, null);
                break;
               
                case "strikethrough":
                TheEditor.execCommand('strikethrough', false, null);
                break;
               
                case "subscript":
                TheEditor.execCommand('subscript', false, null);
                break;
               
                case "superscript":
                TheEditor.execCommand('superscript', false, null);
                break;
               
               
                case "justifycenter":
                TheEditor.execCommand('justifycenter', false, null);
                break;
               
                case "justifyleft":
                TheEditor.execCommand('justifyleft', false, null);
                break;
               
                case "justifyright":
                TheEditor.execCommand('justifyright', false, null);
                break;
               
                case "justifyfull":
                TheEditor.execCommand('justifyfull', false, null);
                break;
               
                case "selectall":
                TheEditor.execCommand('selectall', false, null);
                break;
               
                case "removeformat":
                TheEditor.execCommand('removeformat', false, null);
                break;
               
                case "copy":
                TheEditor.execCommand('copy', false, null);
                break;
               
                case "cut":
                TheEditor.execCommand('cut', false, null);
                break;
               
                case "paste":
                TheEditor.execCommand('paste', false, null);
                break;
               
                case "undo":
                TheEditor.execCommand('undo', false, null);
                break;
               
                case "redo":
                TheEditor.execCommand('redo', false, null);
                break;
           
               
            }
           
           
        }
Avatar billede w13 Novice
07. maj 2008 - 15:31 #9
I øvrigt er "java script:" helt overflødigt i onclick og andre eventhandlers, da der i disse som standard skrives javascript. :)
Avatar billede roenving Novice
07. maj 2008 - 15:47 #10
-- og hele den blok kan vel skrives:

  SelectEdit : function(id){
    TheEditor.execCommand(id, false, null);
  }
Avatar billede dotnewbi Juniormester
07. maj 2008 - 18:23 #11
selv om at jeg sætter denne linje ind så virker den ikke i IE6 eller I
document.getElementById('editor_content').contentWindow.focus();

roenving--> jo det kan den :0) jeg har bare valgt at lave switch'en for bedre at holde styr på hvilke funktioner jeg har fået sat ind, men da skal tilslut gøres mere simple.
Avatar billede w13 Novice
07. maj 2008 - 19:02 #12
I min wysiwyg har jeg en lignende funktion, der således ud:

function ExecCommand(a,b,c){
    document.getElementById("wysiwyg").contentWindow.focus();
    document.getElementById("wysiwyg").contentWindow.document.execCommand(a,b,c);
}
Avatar billede dotnewbi Juniormester
07. maj 2008 - 20:59 #13
nu er mit javascript :

var TheEditor;
var rememberContent = "";
var doc;
var i_id;

wi_editor = {
   
      CreateEditor: function(id) {
       
         
      doc=document.getElementById(id);
     
      doc.style.display ="none";
     
      i_id = "editor_" + id;
     
     
     
   
      if(doc == null) {
            alert("Det er ingen TEXTAREA med id'et :" + id );
            return;
        }
       
       
        if(doc.innerHTML != null && doc.innerHTML != "")
        rememberContent = doc.innerHTML;
       
        var newElm = document.createElement("div");
        newElm.setAttribute( "id", "editor" );
       
       
        newElm.innerHTML = "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"bold\")'>bold</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"italic\")'>italic</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"underline\")'>underline</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"strikethrough\")'>strikethrough</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"subscript\")'>subscript</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"superscript\")'>superscript</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"justifycenter\")'>justifycenter</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"justifyleft\")'>justifyleft</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"justifyright\")'>justifyright</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"justifyfull\")'>justifyfull</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"selectall\")'>selectall</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"removeformat\")'>removeformat</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"copy\")'>copy</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"cut\")'>cut</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"paste\")'>paste</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"redo\")'>redo</div>";
        newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"undo\")'>undo</div>";
        newElm.innerHTML += "<div class='clear'></div>";
        newElm.innerHTML += "<iframe id='"+i_id+"' frameborder='0' style='width:100%;height:300px;'></iframe>";
       
        doc.parentNode.insertBefore(newElm,doc);
     
       
        TheEditor = document.getElementById(i_id).contentWindow.document;
       
        TheEditor.open();
        TheEditor.write(rememberContent);
        TheEditor.close();
               
        if (TheEditor.body.contentEditable) {
            TheEditor.body.contentEditable = true;
        }
        else {
            TheEditor.designMode = "on";   
        }
       
       
       
        //alert(newElm.innerHTML);
             
        },
       
        SelectEdit : function(id){
           
            try {
    document.getElementById(i_id).contentWindow.document.execCommand("bold", false, null);
  }  catch (e) {
    alert("This demo is not supported on your level of Mozilla.");
  }
           
            document.getElementById(i_id).contentWindow.focus();
            TheEditor.execCommand(id, false, null);
           
           
        }
       
}

men det virker stadig ikke i IE
Avatar billede w13 Novice
07. maj 2008 - 21:10 #14
document.getElementById(i_id).contentWindow.focus();
skal lige op foran try tror jeg.
Avatar billede dotnewbi Juniormester
07. maj 2008 - 21:19 #15
jeg har fjernet try delen og det virker stadig ikke! heller ikke vis jeg sætter "editor_content" ind istedet for "i_id"
Avatar billede w13 Novice
19. maj 2008 - 12:57 #16
Prøv lige at alerte:

alert(document.getElementById(i_id).contentWindow);
Avatar billede dotnewbi Juniormester
23. maj 2008 - 11:26 #17
lukker! smid et svar
Avatar billede w13 Novice
23. maj 2008 - 11:33 #18
:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester