Autor Zpráva
Senky
Profil
Zdravím,
ako som tak programoval jeden väčší skript, narazil som na jeden problém. Skript fungoval tak, že sa pomocou dlhého skriptu načítala do hlavičky 1 funkcia a ostatok skriptu sa vykonal tým v adresnom riadku. Teraz som sa však rozhodol, že ak chcem aby skript fungoval aj v IE, musím ho dať celý do súboru, ktorý sa potom do dokumentu pridá a do adresného riadku vložiť iba to najmenej. Aj som to atk urobil, ibaže od vtedy mi pri spustení takejto funkcie:
function preview()
{
  var string_source = document.getElementById('message').value;
  var string = new String(string_source);
  string = string.replace (/\n/g, "<br />");
  string = string.replace (/\[b\]/g, "<b>");
  string = string.replace (/\[\/b\]/g, "</b>");
  string = string.replace (/\[i\]/g, "<i>");
  string = string.replace (/\[\/i\]/g, "</i>");
  string = string.replace (/\[u\]/g, "<u>");
  string = string.replace (/\[\/u\]/g, "</u>");
  string = string.replace (/\[s\]/g, "<s>");
  string = string.replace (/\[\/s\]/g, "</s>");
  string = string.replace (/\[spoiler\]/g, "<div id='spoiler'><input type='button' value='Spoiler' onclick='toggle_spoiler(this)' /><div><span style='display:none'>");
  string = string.replace (/\[\/spoiler\]/g, "</span></div></div>");
  string = string.replace (/\[ally\]/g, "<a href='' onclick='return false;'>");
  string = string.replace (/\[\/ally\]/g, "</a>");
  string = string.replace (/\[player\]/g, "<a href='' onclick='return false;'>");
  string = string.replace (/\[\/player\]/g, "</a>");
  string = string.replace (/\[village\]/g, "<a href='' onclick='return false;'>Dedina xxx ");
  string = string.replace (/\[\/village\]/g, " Kxx</a>");
  string = string.replace (/\[img\]/g, "<img src='");
  string = string.replace (/\[\/img\]/g, "'/>");
  string = string.replace (/\[size=6\]/g, "<span style='font-size:6pt'>");
  string = string.replace (/\[size=7\]/g, "<span style='font-size:7pt'>");
  string = string.replace (/\[size=12\]/g, "<span style='font-size:12pt'>");
  string = string.replace (/\[size=20\]/g, "<span style='font-size:20pt'>");
  string = string.replace (/\[\/size\]/g, "</span>");
  document.getElementById('preview_div').innerHTML = string;
}

hlási preview is not a function. Nie, preview is not defined, takže zjavne tú funkciu našlo, ale neviem prečo, nechce ju spustiť.
Vedel by mi niekto poradiť, čo je na tom zle?

Ešte dodám, že po úprave skriptu sú v novonačítanom *.js súbore aj priame príkazy, nie len funkcie, ako to bolo, kým bol celý skript robený v adresnom riadku.
Joker
Profil
Senky:
zjavne tú funkciu našlo, ale neviem prečo, nechce ju spustiť
Nemáte tam náhodou proměnnou pojmenovanou preview nebo tak něco?
Senky
Profil
Nie nie. Ono som to nakoniec urobil tak, že na stránku vložím až 2x <script src=... Prvý je na všetky príkazy, ktoré majú zmeniť stránku, druhý je tá funkcia a takto to funguje...
Ďakujem však za ochotu...
Chamurappi
Profil
Reaguji na Senkyho:
hlási preview is not a function. Nie, preview is not defined, takže zjavne tú funkciu našlo
A zjevně to, co to našlo, není funkce :-)
Nemáš na stránce nějaký element s id="preview" či name="preview"?

Mimochodem, spousta těch replaců by šla smrsknout do jednoho.
Senky
Profil
Chamurappi:
Mimochodem, spousta těch replaců by šla smrsknout do jednoho.
No ja som to skúsil urobiť tak, že search bolo v jednom Array a replace tiež, ibaže mi to nejako nešlo. Skúšal som všetko možné, tie regexp som dával s úvodzovkami aj bez a stále to hádzalo chyby, tak som to takto rozdeli a funguje to všade okrem IE, lebo ako som čítal, tak IE ani nevie pracovať s replace...
Chamurappi
Profil
Reaguji na Senkyho:
No ja som to skúsil urobiť tak, že search bolo v jednom Array a replace tiež
Mluvil jsem o snížení počtu replaců, ne o jejich přestrkání do cyklu.

funguje to všade okrem IE, lebo ako som čítal, tak IE ani nevie pracovať s replace
Nechápu, co jsi dělal a kde jsi co četl.
Senky
Profil
No táto funkcia mi v IE nefunguje...

EDIT: Teda, celá funkcia (pracuje v 2 verziách - 1 je cez replace a druhá posiela údaje cez ajax do php súboru, ktorý potom cez preg_replace zmení všetky bb kódy a vráti výsledok) vyzerá takto:
function preview()
  {
    if(document.getElementById('ajax').checked == 1)
    {
      var str = document.getElementById('editorform').value;
      str = new String(str);
      str = str.replace (/\n/g, "<br />");
      str = str.replace (/#/g, "~");
      if (str.length==0)
      {
        document.getElementById('preview_div').innerHTML="";
        return;
      }
      xmlhttp=GetXmlHttpObject();
      if (xmlhttp==null)
      {
        alert ("Your browser does not support XMLHTTP!");
        return;
      }
      var url="dk_editor_ajax.php";
      url=url+"?text="+str;
      xmlhttp.onreadystatechange=function() {
        if(xmlhttp.readyState == 4) {
          var string = xmlhttp.responseText;
          string = new String(string);
          string.replace (/~/g, "#");
          document.getElementById('preview_div').innerHTML=string;
        }
      }
      xmlhttp.open("GET",url,true);
      xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      xmlhttp.send(null);
    }
    else
    {
    var string_source = document.getElementById('editorform').value;
    var string = new String(string_source);
    string = string.replace (/\n/g, "<br />");
    string = string.replace (/\[b\]/g, "<b>");
    string = string.replace (/\[\/b\]/g, "</b>");
    string = string.replace (/\[i\]/g, "<i>");
    string = string.replace (/\[\/i\]/g, "</i>");
    string = string.replace (/\[u\]/g, "<u>");
    string = string.replace (/\[\/u\]/g, "</u>");
    string = string.replace (/\[s\]/g, "<s>");
    string = string.replace (/\[\/s\]/g, "</s>");
    string = string.replace (/\[spoiler\]/g, "<div id='spoiler'><input type='button' value='Spoiler' onclick='toggle_spoiler(this)' /><div><span style='display:none'>");
    string = string.replace (/\[\/spoiler\]/g, "</span></div></div>");
    string = string.replace (/\[ally\]/g, "<a href='' onclick='return false;'>");
    string = string.replace (/\[\/ally\]/g, "</a>");
    string = string.replace (/\[player\]/g, "<a href='' onclick='return false;'>");
    string = string.replace (/\[\/player\]/g, "</a>");
    string = string.replace (/\[village\]/g, "<a href='' onclick='return false;'>Dedina xxx ");
    string = string.replace (/\[\/village\]/g, " Kxx</a>");
    string = string.replace (/\[img\]/g, "<img src='");
    string = string.replace (/\[\/img\]/g, "'/>");
    string = string.replace (/\[size=6\]/g, "<span style='font-size:6pt'>");
    string = string.replace (/\[size=7\]/g, "<span style='font-size:7pt'>");
    string = string.replace (/\[size=12\]/g, "<span style='font-size:12pt'>");
    string = string.replace (/\[size=20\]/g, "<span style='font-size:20pt'>");
    string = string.replace (/\[\/size\]/g, "</span>");
    document.getElementById('preview_div').innerHTML = string;
    }
  }

  function GetXmlHttpObject()
  {
    if (window.XMLHttpRequest)
    {
      // code for IE7+, Firefox, Chrome, Opera, Safari
      return new XMLHttpRequest();
    }
    if (window.ActiveXObject)
    {
      // code for IE6, IE5
      return new ActiveXObject("Microsoft.XMLHTTP");
    }
    return null;
  }

a php vyzerá takto:
<?php
  $string = $_GET['text'];
  $string = preg_replace('/\[b\]/', "<b>", $string);
  $string = preg_replace('/\[\/b\]/', "</b>", $string);
  $string = preg_replace('/\[i\]/', "<i>", $string);
  $string = preg_replace('/\[\/i\]/', "</i>", $string);
  $string = preg_replace('/\[u\]/', "<u>", $string);
  $string = preg_replace('/\[\/u\]/', "</u>", $string);
  $string = preg_replace('/\[s\]/', "<s>", $string);
  $string = preg_replace('/\[\/s\]/', "</s>", $string);
  $string = preg_replace('/\[spoiler\]/', "<div id='spoiler'><input type='button' value='Spoiler' onclick='toggle_spoiler(this)' /><div><span style='display:none'>", $string);
  $string = preg_replace('/\[\/spoiler\]/', "</span></div></div>", $string);
  $string = preg_replace('/\[ally\]/', "<a href='' onclick='return false;'>", $string);
  $string = preg_replace('/\[\/ally\]/', "</a>", $string);
  $string = preg_replace('/\[player\]/', "<a href='' onclick='return false;'>", $string);
  $string = preg_replace('/\[\/player\]/', "</a>", $string);
  $string = preg_replace('/\[village\]/', "<a href='' onclick='return false;'>Dedina xxx ", $string);
  $string = preg_replace('/\[\/village\]/', " Kxx</a>", $string);
  $string = preg_replace('/\[img\]/', "<img src='", $string);
  $string = preg_replace('/\[\/img\]/', "'/>", $string);
  $string = preg_replace("/\[url\=(.*?)\](.*?)\[\/url\]/is", "<a href='$1'>$2</a>", $string);
  $string = preg_replace("/\[size=(.*)\](.*)\[\/size\]/Usi", "<span style=\"font-size:\\1pt\">\\2</span>", $string);
  $string = preg_replace("/\[quote](.*)\[\/quote\]/Uis", "<div>Author napísal:</div><div style=\"border:solid 1px;\">\\1</div>", $string);
  $string = preg_replace("/\[quote=(.*)](.*)\[\/quote\]/Uis", "<table class=\"quote\"><tr><td></td><td class=\"quote_author\">Janko napísal:</td></tr><tr><td width=\"10\"></td><td class=\"quote_message\">čau, ako sa máš?</td></tr></table>", $string);
  $string = preg_replace("/\[color=(\~[0-9A-F]{6}|[a-z]+)\](.*)\[\/color\]/Usi", "<span style=\"color:\\1\">\\2</span>", $string);
  echo $string;
?>

V IE mi síce dole žiadnu chybu nevypíše, avšak ani náhľad sa nezobrazí. Neviem fakt čo by na tom mohlo byť zle, ale nejde to :(
Vedeli by ste mi poradiť?
Chamurappi
Profil
Reaguji na Senkyho:
Už si vzpomínám, ty jsi ten umělec, který si myslel, že když sestaví adresu „dk_editor_ajax.php?text=něco#text“, že se text za mřížkou dostane na server a že tam ho bere PHP jako komentář.

Spousta těch replaců (i v PHP) by šla smrsknout do jednoho, ale to je fuk.

No táto funkcia mi v IE nefunguje...
Z příspěvku [#3] jsem pochopil, že jsi to vyřešil nějak jinak. Zeptal jsem se tě (v [#4]) na možnou příčinu závady, což jsi ignoroval, a v [#5] jsi vystartoval s příběhem o poli a s hypotézou, že „IE ani nevie pracovať s replace“ — mé pozastavení nad tím, kdes to vzal, jsi opět ignoroval. Nemá smysl ti radit, poskytuješ málo informací, neodpovídáš na otázky.

žiadnu chybu nevypíše, avšak ani náhľad sa nezobrazí
Pokud nezvládáš upřesnit místo, kde k závadě dochází, měl bys to umožnit někomu jinému. (Ne tak, že nás zasypeš megabajty kódu.)
Senky
Profil
Dobre teda. Ako prvé vám dám odkaz na reálnu stránku, kde tento skript pracuje:
http://www.online-hry-help.sk/dk_editor.php

Chamurappi:
Zeptal jsem se tě (v [#4]) na možnou příčinu závady, což jsi ignoroval
Nie, nemám. Iba preview_div. Môžeš si to skontrolovať...

mé pozastavení nad tím, kdes to vzal, jsi opět ignoroval
teraz už presne neviem povedať, ale zjavne to bola nejaká chybná odpoveď...

Tak, možno teraz je už informácií dosť. Ak nie, napíšte, čo ešte také budete potrebovať na určenie chyby. Ako som písal, mne IE žiadnu chybu nehlási, tak neviem zistiť, kde chyba je.

Za odpovede ďakujem...
Chamurappi
Profil
Reaguji na Senkyho:
Ako prvé vám dám odkaz na reálnu stránku
To jsi měl udělat už v prvním příspěvku a měl bys správnou odpověď za pár minut.

Problém vidím tady:
        var string_source = document.getElementById('editorform').value;
        var string = new String(string_source);
Metoda document.getElementById hledá v Exploreru i podle name, takže najde tento formulář:
 <form name='editorform'>
… jehož value pochopitelně není definováno. Ty si tohle undefined ze string_source převedeš na řetězec (což je zcela zbytečná a jen ti to zamaskovalo chybu), s "undefined" pak provádíš všelijaké nahrazování a nakonec jej vypíšeš. To je celé.
Senky
Profil
Tak som to teda zmenil tak, že textarea správy má id aj name "message" a formu to ostalo ako "editorform". new String-y som dal preč, a funguje to. Síce sa ešte budem musieť pohrať s css, ale ide to. Ďakujem veľmi pekne...
Našiel som však ďalší problém. Náhľad teraz funguje, avšak ak dám "rozšírený náhľad", nefunguje diakritika. To sa stáva iba v IE. Neviem prečo, mám pri posielaní
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
tak som myslel, že by to ísť malo, ale nejde.
Vedeli by ste mi poradiť aj s týmto?
Ďakujem...

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: