Autor | Zpráva | ||
---|---|---|---|
Senky Profil |
#1 · Zasláno: 6. 1. 2010, 20:16:29
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 |
#2 · Zasláno: 6. 1. 2010, 20:58:47
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 |
#3 · Zasláno: 6. 1. 2010, 21:10:23
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 |
#4 · Zasláno: 6. 1. 2010, 22:49:19
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 |
#5 · Zasláno: 7. 1. 2010, 08:54:36
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 |
#6 · Zasláno: 7. 1. 2010, 15:21:13
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 |
#7 · Zasláno: 7. 1. 2010, 16:16:46 · Upravil/a: Senky
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 |
#8 · Zasláno: 7. 1. 2010, 17:13:19
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 |
#9 · Zasláno: 7. 1. 2010, 18:41:52
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 |
#10 · Zasláno: 7. 1. 2010, 19:03:48 · Upravil/a: Chamurappi
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); <form name='editorform'> |
||
Senky Profil |
#11 · Zasláno: 7. 1. 2010, 19:44:28
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... |
||
Časová prodleva: 15 let
|
0