มหากาพย์แห่งบัก


ที่มาของปัญหา
----------

สืบเนื่องจากการพยายามใช้ [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(/&gt\;/g,">");

mybody=mybody.replace(/&lt\;/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 ขึ้นมาอีกก็ใช้ได้แล้ว
เย้

**ปล หวังว่าคงไม่ต้องแก้แล้วนะ**

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Connecting to %s