javascript:<车身负载=“">和window.onload
javascript: <body onload=""> and window.onload
我今天遇到了一个奇怪的错误。我有一个简单的用户脚本,它向所有站点添加了一个window.onload
事件。但其中一个站点定义了<body onload="func();">
。发生的情况是,window.onload
正常工作,但<body onload="">
在安装用户脚本后停止为站点工作。
当我使用window.body.onload
时,两者效果都很好。我知道window.onload
和<body onload="">
是做同一件事的不同方式,但window.body.onload
中发生了什么,使它与<body onload="">
一起工作得很好?
Window.onload和body标记的onload是相同的事件。所以,若您用两种不同的方法两次设置同一事件,它最终只会得到一个值——其中一个函数。
window.body.onload是一个单独的事件。这只是DoM的另一个怪癖,以及兄弟们如何处理它。
正如Myforwik所说,与window.onload = ...;
关联的事件与与与<body onload="...">
关联的事件相同。这是window
load
事件。这两种挂钩方式都是旧的DOM0风格,已经过时一段时间了。如果同时指定两者,则后者将获胜,从而淘汰前者。如果多个脚本独立设置window.onload
,情况也是如此。
为了避免这些问题,请使用DOM2风格的事件连接:
if (window.addEventListener) {
// DOM2 standard
window.addEventListener("load", handler, false);
}
else if (window.attachEvent) {
// Microsoft's precursor to it, IE8 and earlier
window.attachEvent("onload", handler);
}
else {
// Some pre-1999 browser
window.onload = handler;
}
function handler() {
}
多个DOM2处理程序可以附加到同一个事件,因此多个不相关的脚本可以订阅它。此外,DOM2处理器可以与DOM0处理程序愉快地共存。
因此,如果您更新用户脚本以使用上述内容,<body onload="...">
页面将不受影响。
- 内联javascript与"<脚本>"字符串错误地关闭了脚本标记
- 显示“<script src='some.js'></脚本>"在Html文档中
- “=>"在javascript中定义函数的语法及其意义
- 为什么使用“;javascript:<代码>"令人不快的
- Javascript.替换元素“<termref/>"用规则的“;文本”;
- Safari-->"应用程序缓存清单的MIME类型不正确:text/plain&”;
- 逻辑“>"以及“<"在Jquery函数内部不起作用
- 为什么“<br>"显示而不是引起中断
- 添加“<strong>"到某个单词使用handlers.js
- 用“<选择></选择>"类型
- 为什么“</脚本>"在脚本标记中,标记被视为结束标记<h1>hlo</h1>&qu
- 什么's是“”的parentNode<tr>"
- Knockout.js"<!--ko if:-->"导致分离DOM元素的块
- 找到第一个序列“/>"在regExp中,javascript
- Regex检测到大于“>"并且小于“0”<"在字符串中
- 如何获取jquery.Ajax与“;投掷1<不要邪恶>"在json响应前面
- 如何使用“>"AngularJS ng-if语句中的比较器
- 修改htmlEntities流行的javascript函数以保留"<br>"子字符串
- 当“<按钮>"单击
- 在JavaScript中,为什么我的“<"以及“>"可以颠倒比较