ali*_*ray 3 javascript jquery compatibility cross-browser
使用jQuery,我可以使用以下函数在DOM加载后立即执行代码:
$(function() {
// do stuff here
});
Run Code Online (Sandbox Code Playgroud)
或等效地:
$(document).ready(function() {
// do stuff here
});
Run Code Online (Sandbox Code Playgroud)
为了更好地理解原始javascript,我使用此代码来实现类似的效果:
window.onload = function() {
// do stuff here
}
Run Code Online (Sandbox Code Playgroud)
这种方法是否跨浏览器兼容?有没有更好的方法来实现这个功能?
是的,它是跨浏览器兼容的,但onLoad等待页面上的所有内容在它触发之前加载.内部jQuery.ready使用DOMContentLoaded事件和一些黑客来支持不支持的旧浏览器DOMContentLoaded.大多数现代浏览器都支持DOMContentLoaded包括IE从版本9开始.您可以测试浏览器是否支持DOMContentLoaded 使用此页面.
如果您没有使用内置支持的jQuery等DOM库,那么如果浏览器不支持它DOMContentLoaded,您可以使用DOMContentLoaded然后回退onLoad.
(function () { // Encapsulating our variables with a IIFE
var hasRun = false; // a flag to make sure we only fire the event once
// in browsers that support both events
var loadHandler = function (evt) {
if (!hasRun) {
hasRun = true;
console.log('loaded via ' + evt.type);
}
};
document.addEventListener('DOMContentLoaded', loadHandler, false);
window.addEventListener('load', loadHandler, false);
}());Run Code Online (Sandbox Code Playgroud)
除非您期望访问者使用非常老的浏览器(如IE8),否则只需在DOMContentLoaded没有备份的情况下使用即可.
document.addEventListener('DOMContentLoaded', function (evt) {
console.log('loaded via ' + evt.type);
}, false);Run Code Online (Sandbox Code Playgroud)
这类似于JQuery的作用:
window.$ = {};
$.ready = function(fn) {
if (document.readyState == "complete")
return fn();
if (window.addEventListener)
window.addEventListener("load", fn, false);
else if (window.attachEvent)
window.attachEvent("onload", fn);
else
window.onload = fn;
}
Run Code Online (Sandbox Code Playgroud)
并使用它:
$.ready(function() {
// code here...
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10254 次 |
| 最近记录: |