ที่มาของปัญหา ---------- สืบเนื่องจากการพยายามใช้ [showdown.js](http://attacklab.net/showdown/) [asciimathml.js](http://sukoom2001.exteen.com/20080805/www1.chapman.edu/~jipsen/asciimath.html) [syntaxhilighter.js](http://code.google.com/p/syntaxhighlighter/) ดังที่ได้เคยกล่าวไว้ [ที่นี่](http://sukoom2001.exteen.com/20080805/markdown) แล้วเราต้องการใช้ทั้งหมดนี้ โดยพยายาททำให้มัน code ทั้งหมด auto load อัตโนมัติตอนเข้าเว็บสำหรับ asciimathml ง่ายเพราะมันทำให้แล้ว ส่วน showdown นั้นเล่า ตอนแรกคิดว่าง่าย เพราะคิดว่าแค่เพิ่มโคด ส่วนนี้เค้าไปน่าจะใช้ได้
ShowDowntranslated = false;
function showdownTranslate()
{
if(!ShowDowntranslated)
{
ShowDowntranslated = true;
var sd_elements = document.getElementsByTagName(“div”);
for(i=0;i
ตอนแรกนึกว่าได้ทันที เพราะเราไม่ได้ลองใช้ IE มาทดสอบ ประมาทใจไปนิดหน่อย แต่ตอนหลังมาพบว่า มีบักเกิดขึ้น โปรแกรมไม่ทำงานใน IE สาเหตุเพราะ ฟังก์ชั่น sd_element.innerHTML; ของ IE กับของ Gecko ต่างกัน ต่างกันตรงที่ ถ้าเป็น element ที่ไม่ใช้ pre textarea แล้วใน IE จะตัดตัวขึ้นบันทัดใหม่ ช่องว่างหน้าหลัง อัตโนมัติ อ้าว งั้นแย่ดิ เพราะถ้าเปลี่ยน element เป็น pre จะทำให้ไม่ตัดคำ ซึ่งเป็ฯข้อเสียหลัก ทำไงดี จึงทำการสังคายนาโคดใหม่ อีกครั้ง เป็น
ShowDowntranslated=false;
function showdownTranslate()
{
if(!ShowDowntranslated)
{
converter=new Showdown.converter();
ShowDowntranslated=true;
xyz=1;
var objparent;
while(xyz!=0)
{
var _b7=document.getElementsByTagName("pre");
for(i=0;i<_b7.length;i++)
{
sd_element=_b7[i];
objparent = sd_element.parentNode;
xyz=0;
if(sd_element.className=="mdcode")
{
xyz=1;
sd_element.style.display="none";
mybody=sd_element.innerHTML;
mybody=mybody.replace(/\r\n/g,"\n");
mybody=mybody.replace(/>\;/g,">");
mybody=mybody.replace(/<\;/g,"<");
mytext=converter.makeHtml(mybody);
divmy = document.createElement("div");
divmy.className = "mdcode";
divmy.innerHTML = mytext;
objparent.insertBefore(divmy,sd_element);
objparent.removeChild(sd_element);
}
}
}
}
dp.SyntaxHighlighter.ClipboardSwf = 'http://www.sukoom2001.co.cc/syntax/Scripts/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('code');
};
ลองทดสอบดูกับเครื่องที่ใน มหาลัยก็ ทำงานได้ดี (ต้องทำที่อื่นเพราะที่บ้านไม่มีวินโดว์) แต่ครั้นพอวันรุ่งขึ้นมาตรวจสอบดูอีกทีพบว่า สมการดันมามีปัญหาซะฉิบ เพราะ สัญลักษณ์พิเศษดันมาใช้ไม่ได้นี่สิ งมอยู่พักนึงจึงทราบว่า มันเน่าเพราะ **notepad** ใฃ่ครับ **notepad** คือเนื่องจากคอมที่ไปใช้นั้นมีแต่ notepad ให้ใช้แก้จึงพลาดไปอย่างนึง คือ encoding ของอักขระ เนื่องด้วย notepad นั่นพยายามเปลี่ยน encoding เป็น windows874 อย่างจงใจไม่ให้ผมรู้ตัว ทำให้ สัญลักษณ์พิเศษบางตัวหายไปอย่างไม่ทราบสาเหตุ ไม่เป็นไรครับโหลด backup ขึ้นมาอีกก็ใช้ได้แล้ว เย้ **ปล หวังว่าคงไม่ต้องแก้แล้วนะ**