Avatar billede dugi Nybegynder
30. april 2005 - 21:10 Der er 23 kommentarer og
1 løsning

WYSIWYG font problem

Hej derude.

Jeg har endelig fået lavet en WYSIWYG editor, med de få funktioner som jeg har brug for. Editoren bliver brugt via iFrame.
Men hvordan ændre/loader jeg iFrames style?

Jeg vil utrolig gerne have den til at være "Tahoma" som standard font, i steden for den kedelige Times New Roman. Har downloadet en masse editorer som havde en anden standard, men kan ikke rigtig finde "fixet" til mit problem i deres sources :/

Nogle som kan hjælpe mig?
På forhånd mange tak.

Med venlig hilsen
Morten
Avatar billede foxmulder58 Praktikant
30. april 2005 - 21:34 #1
lavet et css (tio det dokument, der er iframen)
og angiv:

font-family:verdana,arial,.....

i en WYSIWYG editor burde da også kunne markere teksten og anigive at den ska være i verdana?

mvh
Mads
Avatar billede olebole Juniormester
30. april 2005 - 22:47 #2
<ole>

- eller der, hvor du sætter designMode:

<iframe src="tom.html" id="editor" name="oEditor"></iframe>

<script type="text/JavaScript">
var doc = document.oEditor.document;
doc.designMode = "on";
doc.body.style.fontFamily = "tahoma";
</script>

Fedt at det lykkedes dig at finde ud af det, i øvrigt  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
30. april 2005 - 22:52 #3
Hmmmm ... den skal naturligvis fyres af, når der loades et dokument  :)

<iframe src="tom.html" id="editor" name="oEditor" onload="setFont()"></iframe>

<script type="text/JavaScript">
function setFont() {
    var doc = document.oEditor.document;
    doc.body.style.fontFamily = "tahoma";
    doc.designMode = "on";
}
</script>
Avatar billede dugi Nybegynder
30. april 2005 - 23:39 #4
Der er ingen af tingene som virker :/

Her er min javascript del:
<script language="JavaScript">
function startEditor()
{
  document.getElementById('editable').contentWindow.document.designMode = 'ON';
  document.getElementById('editable').body.style.fontFamily = 'tahoma';
  document.getElementById('editable').contentWindow.document.open();
  document.getElementById('editable').contentWindow.document.write();
  document.getElementById('editable').contentWindow.document.close();
}

function toolbar()
{
  document.write('<tr>');
  document.write('  <td style="width: 21px; height: 20px"><button onClick="action(\'bold\')"><img src="images/toolbar/bold.gif" style="width: 21px; height: 20px"></button></td>');
  document.write('  <td style="width: 21px; height: 20px"><button onClick="action(\'italic\')"><img src="images/toolbar/italic.gif" style="width: 21px; height: 20px"></button></td>');
  document.write('  <td style="width: 21px; height: 20px"><button onClick="action(\'underline\')"><img src="images/toolbar/underline.gif" style="width: 21px; height: 20px"></button></td>');
  document.write('  <td style="width: 21px; height: 20px"><button onClick="action(\'justifyleft\')"><img src="images/toolbar/justifyleft.gif" style="width: 21px; height: 20px"></button></td>');
  document.write('  <td style="width: 21px; height: 20px"><button onClick="action(\'justifycenter\')"><img src="images/toolbar/justifycenter.gif" style="width: 21px; height: 20px"></button></td>');
  document.write('  <td style="width: 21px; height: 20px"><button onClick="action(\'justifyright\')"><img src="images/toolbar/justifyright.gif" style="width: 21px; height: 20px"></button></td>');
  document.write('  <td style="width: 21px; height: 20px"><button onClick="action(\'justifyfull\')"><img src="images/toolbar/justifyfull.gif" style="width: 21px; height: 20px"></button></td>');
  document.write('  <td style="width: 21px; height: 20px"><button onClick="createImage()"><img src="images/toolbar/image.gif" style="width: 21px; height: 20px"></button></td>');
  document.write('  <td style="width: 21px; height: 20px"><button><img src="images/toolbar/link.gif" style="width: 21px; height: 20px"></button></td>');
  document.write('  <td style="width: 21px; height: 20px"><button><img src="images/toolbar/mail.gif" style="width: 21px; height: 20px"></button></td>');
  document.write('  <td style="width: 21px; height: 20px"><button><img src="images/toolbar/spellcheck.gif" style="width: 21px; height: 20px"></button></td>');
  document.write('  <td style="width: 21px; height: 20px"><button><img src="images/toolbar/source.gif" style="width: 21px; height: 20px"></button></td>');
  document.write('</tr>');


function action(what)
{
  document.getElementById('editable').contentWindow.document.execCommand(''+what+'',false,null);
}

function createImage()
{
  imagePath = prompt('Enter Image URL:', 'http://');
  if ((imagePath != null) && (imagePath != ""))
  {
    document.getElementById('editable').contentWindow.document.execCommand('InsertImage', false, imagePath);
  }
}
</script>


Min html del:
<body onLoad="startEditor()">
<table style="width: 100%; height: 100%" cellspacing="0" cellpadding="0">
  <tr>
    <td valign="middle" align="center">
    <table style="width: 500px; height: 200px; border: 0px" cellspacing="0" cellpadding="0">
      <tr>
        <td>
        <table style="height: 20px; border: 0px" cellspacing="0" cellpadding="0">
          <script> toolbar(); </script>
        </table>
        </td>
      </tr>
      <tr>
        <td style="width: 500px; height: 200px"><iFrame id="editable" class="editor" src="empty.htm"></iFrame></td>
      </tr>
      <tr>
        <td style="width: 500px; height: 200px"><textarea name="content" id="content" style="display: none; width: 500px; height: 200px"></textarea></td>
      </tr>
    </table>
    </td>
  </tr>
</table>
Avatar billede olebole Juniormester
30. april 2005 - 23:43 #5
Hvad betyder "virker ikke"? Hvad sker der (ikke)? Hvad får du af fejl?
Avatar billede dugi Nybegynder
30. april 2005 - 23:47 #6
Ingen fejl, eller noget.
Den starter bare ikke som "Tahoma" når man skriver - hvilket jeg vil have den til :/
Avatar billede olebole Juniormester
01. maj 2005 - 00:20 #7
Det første, der sker, er man får banket en JS-fejl lige i synet ... hvorfor skriver du så, der ikke kommer fejl?

Hvorfor document.getElementById('editable')? Det har jeg ikke skrevet - og du kan ikke komme i kontakt med dokumentet med den adressering. Iframe'en skal have et name og så skal du bruge samme syntaks som mig
Avatar billede olebole Juniormester
01. maj 2005 - 00:22 #8
- og hvad er 'contentWindow'? Har du overhovedet haft det dér til at virke? Det ser komplet sort ud
Avatar billede dugi Nybegynder
01. maj 2005 - 00:29 #9
Yes alt virker, UNDTAGEN det med teksten, jeg kører så den som cross-browser, min kode virker BÅDE i IE og FF :)

Men ja kan godt se det du har skrevet er anderledes, så det prøver jge lige :)
Avatar billede olebole Juniormester
01. maj 2005 - 00:32 #10
Jamen, dine egne funktioner kan umuligt virke, hvis dette er din kode. Det er simpelthen umuligt
Avatar billede olebole Juniormester
01. maj 2005 - 00:33 #11
Der må være noget, du ikke viser - du må lægge et link til siden, hvis jeg skal hjælpe
Avatar billede olebole Juniormester
01. maj 2005 - 00:37 #12
Ahhhh ... nu forstår jeg. Jeg sov vist  ;o)
Avatar billede olebole Juniormester
01. maj 2005 - 00:38 #13
document.getElementById('editable').contentWindow.document.body.style.fontFamily = 'tahoma';

- skal du så bruge  :)
Avatar billede dugi Nybegynder
01. maj 2005 - 00:39 #14
Det virkede sgu med den kode du smed.
Havde bare glemt et "document", men jeg skal altså bruge getElementById for at få min kode til at virke ...

Du kan se min editor her: www.dugi.1go.dk/WYSIWYG/
Men har ikke fået lavet de sidste 4 knapper :)
Avatar billede dugi Nybegynder
01. maj 2005 - 00:42 #15
og den er både Firefox og IE funkionel :D!
KÆFT jeg er stolt, fra at gå til ikke afvide en skid om WYSIWYG også på 10 timer at have lavet så meget :D

Weeee!
Avatar billede dugi Nybegynder
01. maj 2005 - 00:43 #16
Men smid nogle point, du har jo hjulpet mig med mit problem :D!
... tusind tak!
Avatar billede olebole Juniormester
01. maj 2005 - 00:45 #17
Det har da ikke noget med Tahoma at gøre
Avatar billede dugi Nybegynder
01. maj 2005 - 00:45 #18
HOV!
Det virker sgu ikke i IE - troede sgu når det virkede i FF at det også virkede i IE :/
Avatar billede dugi Nybegynder
01. maj 2005 - 00:45 #19
suk, det virker i IE.
Avatar billede dugi Nybegynder
01. maj 2005 - 00:48 #20
Sådan, nu virker den både i FF _OG_ IE :D!
Addede bare lige den første kode som du startede med at skrive :P

SMID SÅ DE POINT olebole, så vi kan komme i seng? :D!
Avatar billede olebole Juniormester
01. maj 2005 - 01:05 #21
oki ... det var zq en hård fødsel  :)
Avatar billede olebole Juniormester
01. maj 2005 - 01:34 #22
Du kan også skrive:

function startEditor() {
  document.getElementById('editable').contentWindow.document.open();
  document.getElementById('editable').contentWindow.document.write("<body style='font-family:tahoma'></body>");
  document.getElementById('editable').contentWindow.document.close();
  document.getElementById('editable').contentWindow.document.designMode = 'ON';
}
Avatar billede dugi Nybegynder
02. maj 2005 - 17:51 #23
Yes men fandt ud, man bare skulle aktivere "stylesheet"'et i den fil som ligger i src. Har jeg fået gjort nu, men nu er jeg stødt på et nyt problem.

Når jeg går fra "WYSIWYG-mode" til "HTML-mode" og tilbage igen, virker den pludselig ikke mere i Firefox, men den virker stadig i IE. Jeg får en eller anden sindsyg fejl i Firefox.

Fejlen:
Fejl: uncaught exception: [Exception... "Component returned failure code: 0xc1f30001 (NS_ERROR_NOT_INITIALIZED) [nsIDOMNSHTMLDocument.execCommand]"  nsresult: "0xc1f30001 (NS_ERROR_NOT_INITIALIZED)"  location: "JS frame :: http://dugi/WYSIWYG/DuGi/ :: action :: line 78"  data: no]

Min kode:
function switchView()
{
  if (document.getElementById('eView').value == 0)
  {
    document.getElementById('eSourceField').value = document.getElementById('eEditorArea').contentWindow.document.body.innerHTML;
    document.getElementById('eEditorArea').style.display = 'none';
    document.getElementById('eSourceField').style.display = 'block';
    document.getElementById('eView').value = 1;
  }
  else if (document.getElementById('eView').value == 1)
  {
      document.getElementById('eEditorArea').contentWindow.document.body.innerHTML = document.getElementById('eSourceField').value;
    document.getElementById('eEditorArea').style.display = 'block';
    document.getElementById('eSourceField').style.display = 'none';
    document.getElementById('eView').value = 0;
  }
}


Forstår ikke, hvordan den kan virke i IE, men ikke i Firefox :s
Har du nogen idé, om problemmet kan ligge?
Avatar billede olebole Juniormester
02. maj 2005 - 18:59 #24
Ja, Moz bruger en lidt anden syntaks til at komme frem og tilbage i WYSIWYG. Du behøver ikke et ekstra element til det. Det kan ske direkte i dokumentet.
Fra: http://www.mozilla.org/editor/ie2midas.html :

View source must be done differently for Mozilla. Here is a mapping between the two methods.

IE method to switch to source view:

iHTML = getDocument().body.innerHTML;
getDocument().body.innerText = iHTML;

Mozilla method to switch to source view:

var html = document.createTextNode(getDocument().body.innerHTML);
getDocument().body.innerHTML = "";
getDocument().body.appendChild(html);

IE method to switch back to regular view:

iText = getDocument().body.innerText;
getDocument().body.innerHTML = iText;

Mozilla method to switch back to regular view:

var html = getDocument().body.ownerDocument.createRange();
html.selectNodeContents(getDocument().body);
getDocument().body.innerHTML = html.toString();

- hvor getDocument() er din reference til dokumentet
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

IT-JOB

JP/Politikens Hus

Klient Tekniker

Netcompany A/S

Linux Operations Engineer

PensionDanmark

AI Automation Engineer

TD SYNNEX Denmark ApS

Sales Coordinator

Quadsat ApS

Software Developer