2010-01-25 14 views

回答

1

當我調試它在IE8,我看到一個運行時錯誤的位置:

cd=new Date(); 

最有可能的,這並不與這片HTML的一致:

<li id="cd" class=""><a href="#productInfo-cd">CD</a></li> 

IE'helpfully'啓動了一個ID爲全局變量的元素,因此cd實際上是一個<li>元素,IE不喜歡它,如果你指定了new Date(),那麼IE會把cd視爲正常局部變化能夠,但它不會,因此運行時錯誤。

這段代碼是在一個匿名函數裏面,它真的很討厭(如下所示)。但解決方案很簡單:只需編寫適當的函數,並聲明變量。如果匿名函數會用一條線在頂部聲明變量是這樣的:

var cd, dc, ...other variable names... ; 

它會工作得很好,因爲這時函數內部的cd變量就不得不提到的局部變量,而不是全球IE認爲與id="cd"對應的li元素。

現在完全有可能這只是本頁面的許多問題之一。但我假設IE遇到的第一個錯誤會停止執行腳本的其餘部分,這就是爲什麼它沒有工作。

function anonymous(t, z, y) { 
    dc=new Date('1/1/2000');f=15;ne=8; 
    if(dc.getDay()!=6||dc.getMonth()!=0){ 
    return'Data Not Available' 
    }else{; 
    z=parseInt(z); 
    if(y=='2009'){f=8;ne=1}; 
    gmar=new Date('3/1/'+y); 
    dsts=f-gmar.getDay(); 
    gnov=new Date('11/1/'+y); 
    dste=ne-gnov.getDay(); 
    spr=new Date('3/'+dsts+'/'+y); 
    fl=new Date('11/'+dste+'/'+y); 
    cd=new Date(); 
    if(cd>spr&&cd<fl){ 
     z=z+1 
    }else{ 
     z=z 
    }; 
    utc=cd.getTime()+(cd.getTimezoneOffset()*60000); 
    tz=new Date(utc + (3600000*z)); 
    thisy=tz.getFullYear(); 
    var days=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']; 
    if(thisy!=y){ 
     return'Data Not Available' 
    }else{; 
     thish=tz.getHours(); 
     thismin=tz.getMinutes(); 
     thisd=tz.getDay(); 
     var dow=days[thisd];var ap='AM';var dt='Weekday'; 
     var mint='00'; 
     if(thismin>30){mint='30'} 
     if(thish>=12){ap='PM';thish=thish-12}; 
     if (thish==0){thish=12}; 
     if(thisd==6||thisd==0){dt='Weekend'}; 
     var timestring=thish+':'+mint+ap; 
     var daystring=dow; 
     var endstring=dt; 
     if(t=='h'){ 
      return timestring} 
     if(t=='d'){ 
      return daystring};if(t=='w'){return endstring}}}; 
    } 

現在調試這是從哪裏來的是一個概率。我的調用堆棧讀取的內容如下:

anonymous JScript 
s_doPlugins JScript 
    anonymous function JScript 
global code JScript 

第一個是發生實際錯誤的位置。

哪裏,所有這一切發生的根源就在這裏:

/************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/ 
    var s_code=s.t();if(s_code)document.write(s_code) 

不知何故,從這裏開始,s_doPlugins被稱爲其包含對造成麻煩匿名函數的實際調用。它看起來像s_doPlugins位於s_code.js。如果說我的那一步,我覺得麻煩的是在這一行:

s.prop9=s.getTimeParting('h','-5','2008'); // Set hour 

這是s_code.js 38行。隨着一點點的閒逛,我發現這是實際工作中這個插件:

/* 
* Plugin: getTimeParting 1.3 - Set timeparting values based on time zone 
*/ 
s.getTimeParting=new Function("t","z","y","" 
+"dc=new Date('1/1/2000');f=15;ne=8;if(dc.getDay()!=6||" 
...more crap here... 

這是在s_code.js線95

由於速戰速決我可能會在註釋掉所有呼叫s.getTimeParting()s_doPlugins()s_code.js,看看是否解決了你的問題。然後,長而堅硬但高貴的taks仍然攪動着一些明智的東西:))

+0

感謝您的信息,但我可以在哪裏找到這個匿名方法,在哪個頁面中? – 2010-01-25 22:33:58

+0

@Microgen,這個代碼是鼠窩。但我會努力。我很快更新我的答案: – 2010-01-25 22:44:02

+0

非常感謝,請讓我知道我必須改變以解決此問題 – 2010-01-25 22:50:48

1

我發現這個真氣並發現問題是我的網站使用ID爲「utc」的div,它與s_code JS。 'UTC'是與時間有關的,所以我只能假設有sl JS的JS依靠它是別的東西,如果有的話!

相關問題