如果您打开页面: http://www.rhino.com/shop/product/the-monkees-the-birds-the-bees-the-monkees-boxed-set 您将在页面底部看到下一个和上一个按钮,这些是导航按钮,它们在firefox中工作正常,但是在单击它们时样式将从页面中删除!请告知问题的原因可能是什么。我已经花了几个小时调试:(
答案 0 :(得分:1)
当我在IE8上调试它时,我在这里看到一个运行时错误:
cd=new Date();
这很可能不符合这条HTML:
<li id="cd" class=""><a href="#productInfo-cd">CD</a></li>
IE'有帮助'启动id为全局变量的元素。因此,cd
实际上是<li>
元素,如果您为其分配new Date()
,则IE不喜欢它。如果IE将cd视为普通的局部变量,那将完全没问题,但它不会,因此运行时错误。
这段代码在一个非常讨厌的匿名函数里面(如下所示)。但解决方案很简单:只需编写适当的函数,然后声明变量即可。如果匿名函数在顶部声明变量中使用了一行,如下所示:
var cd, dc, ...other variable names... ;
它会工作得很好,因为那时函数内的cd
变量会引用局部变量,而不是IE认为引用cd
的全局li
元素元素id="cd"
。
现在完全有可能这只是此页面的众多问题之一。但我假设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}}};
}
现在调试它来自哪里是一个问题。我的callstack写道:
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
中对{{1}}的所有来电,并查看是否可以解决您的问题。然后,长期而坚硬但仍然高尚的人仍然在搅动这些混乱的东西:))
答案 1 :(得分:1)
我发现这令人愤怒,并发现问题是我的网站使用ID为“utc”的div,它与s_code JS冲突。 'UTC'是与时间有关的,所以我只能假设,如果存在的话,那里依赖它是一种邋JS的JS!
答案 2 :(得分:0)
随着 2021 年的临近,我想重新解决今年年初引起轰动的旧版 getTimeParting 插件的问题。如果您采用简单的方法编辑插件代码而不是升级到最新版本,那么您需要确保在 1 月 1 日之前再次进行相同的编辑。
可以在此 forum thread 中找到有关此主题的更多信息: