我有一个旧函数,它缺少Mozilla / Firefox的行,因此JavaScript无法正常工作。该功能跟踪鼠标坐标,以便我可以定位窗口。
如何使代码在Firefox中运行?
Xoffset = -60; // modify these values to ...
Yoffset = 20; // change the popup position.
var old, skn, iex = (document.all),
yyy = -1000;
var ns4 = document.layers
var ns6 = document.getElementById && !document.all
var ie4 = document.all
if (ns4) skn = document.dek
else if (ns6) skn = document.getElementById("dek").style
else if (ie4) skn = document.all.dek.style
if (ns4) document.captureEvents(Event.MOUSEMOVE);
else {
skn.visibility = "visible"
skn.display = "none"
}
document.onmousemove = get_mouse;
function popup(msg, bak) {
var content =
"<TABLE WIDTH=150 BORDER=1 BORDERCOLOR=black CELLPADDING=2" +
"CELLSPACING=0 " + "BGCOLOR=" + bak + "><TD ALIGN=center>" +
"<FONT COLOR=black SIZE=2>" + msg + "</FONT></TD></TABLE>";
yyy = Yoffset;
if (ns4) {
skn.document.write(content);
skn.document.close();
skn.visibility = "visible"
}
if (ns6) {
document.getElementById("dek").innerHTML = content;
skn.display = ''
}
if (ie4) {
document.all("dek").innerHTML = content;
skn.display = ''
}
}
function get_mouse(e) {
var x = (ns4 || ns6) ? event.pageX : event.x + document.body.scrollLeft;
skn.left = x + Xoffset;
var y = (ns4 || ns6) ? event.pageY : event.y + document.body.scrollTop;
if (document.documentElement && // IE6 +4.01 but no scrolling going on
!document.documentElement.scrollTop) {
y = event.y + document.documentElement.scrollTop;
}
else if (document.documentElement && // IE6 +4.01 and user has scrolled
document.documentElement.scrollTop) {
y = event.y + document.documentElement.scrollTop;
}
else if (document.body && document.body.scrollTop) { // IE5 or DTD 3.2
y = event.y + document.document.body.scrollTop;
}
skn.top = y + yyy;
}
function kill() {
yyy = -1000;
if (ns4) {
skn.visibility = "hidden";
}
else if (ns6 || ie4) skn.display = "none"
}
我收到此错误:
“事件未定义”
在IE中正常工作。
答案 0 :(得分:7)
我不会发布关于如何重写代码的代码@Ivo Wetzel几乎是你所需要的,但是让meg给你一些建议。
世界正在快速变化,计算机行业也在快速变化。虽然有时它没有我们想要的那么快(IE 6缓慢消失),但是没有必要支持Netscape 4.
请咨询 StatCounter 等网站,了解正在使用的浏览器(在您所在的国家/地区)。另请参阅 YUI graded browser support 。雅虎是互联网上最大的玩家之一,他们的网站几乎适合所有人,所以他们知道他们在谈论什么。
找到一个好的DOM参考。 MDC 几乎就是您所需要的,但对于IE怪癖来说, MSDN 是件好事。谈论怪癖,不要忘记给 QuirksMode compatibility tables 添加书签。
切勿使用ie4 = document.all
之类的内容,因为单个功能无法识别整个浏览器。这就像是说:“嘿,你有金发,你必须是布拉德皮特”。使用特征检测。阅读以下两篇优秀文章: Browser Detection (and What to Do Instead) 和 Feature Detection: State of the Art Browser Scripting
不要使用document.write
,因为它的同步I / O非常糟糕。它会阻止您的页面呈现并导致糟糕的用户体验。网络就是 asynchronous 。
“同步编程是不尊重的,不应该在人们使用的应用程序中使用。” - 道格拉斯·克罗克福德
答案 1 :(得分:3)
哦,我的上帝......这一定是我多年来看到的最糟糕的代码,那么让我们试着把它清理干净吧:
Xoffset = -60; // modify these values to ...
Yoffset = 20; // change the popup position.
var old, skn = document.getElementById("dek").style, yyy = -1000;
function popup(msg, bak) {
var content =
"<TABLE WIDTH=150 BORDER=1 BORDERCOLOR=black CELLPADDING=2" +
"CELLSPACING=0 " + "BGCOLOR=" + bak + "><TD ALIGN=center>" +
"<FONT COLOR=black SIZE=2>" + msg + "</FONT></TD></TABLE>";
yyy = Yoffset;
document.getElementById("dek").innerHTML = content;
skn.display = '';
}
document.onmousemove = function(e) {
e = e || window.event;
var x = e.pageX !== undefined ? e.pageX : e.clientX + document.body.scrollLeft;
var y = e.pageY !== undefined ? e.pageY : e.clientY + document.body.scrollTop;
skn.left = x + Xoffset;
skn.top = y + yyy;
}
function kill() {
yyy = -1000;
skn.display = "none";
}
它仍然无法修复,但它应该工作......不知怎的......好吧,除非你发布其余的HTML,否则我无法测试它。
拜托,求求你......摆脱所有废话并使用jQuery。
答案 2 :(得分:2)
您似乎需要将所有“事件”实例更改为“e”。
答案 3 :(得分:2)
我会测试是否存在对象/属性,而不是测试浏览器。例如:
var x = e.pageX ? e.pageX : e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
我认为可能有一种更简单的方法,例如
var x = e.pageX || e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
但我不确定这会有效。测试一下,看看你得到了什么。另外,有关详细信息,请查看:quirksmode.org/js/events_properties.html
另请注意,我将“event”更改为“e”,因为您传入函数的参数是“e”。如果您仍想使用事件,请将参数重写为:
function get_mouse(event)
虽然我不相信“event”是JS的保留字,但很多浏览器都使用它,所以我建议坚持使用“e”。
答案 4 :(得分:1)
Firefox包含document.documentElement
和document.documentElement.scrollTop
以及document.body
和document.body.scrollTop
,因此您输入的是适用于Firefox的IE区域。
你也应该用
之类的东西开始你的功能function get_mouse(e) {
e = e || window.event;
然后在您使用e
的所有地方使用event
代替event
。
答案 5 :(得分:0)
如果您害怕麻烦,请在函数体的第一行添加var event = e
function get_mouse(e) { var event = e;