我正在使用一些 jQuery,它在除 Internet Explorer 8 之外的所有浏览器中都能正常工作(可能不是早期版本,尽管我并不担心这些。)。我正在使用 jQuery 的 .each 函数循环遍历 JavaScript 数组中的每个元素,该数组是由我正在使用的相当不灵活的 CMS 在我的页面上自动生成的。
例如,我的 CMS 用 javascript 将这个图像对象数组写入我的页面:
paths = [];
paths[0] = new Image();
paths[0].src = "/path/to/image1"
paths[1] = new Image();
paths[1].src = "/path/to/image2"
paths[2] = new Image();
paths[2].src = "/path/to/image3"
paths[3] = new Image();
paths[3].src = "/path/to/image4"
然后我使用 jQuery 每个函数来循环这个数组,并在一个漂亮的小无序列表中返回所有图像。
问题是在使用 jquery 的时候
$(document).ready(function() { ... });
在 FF/Safari/Chrome 等中运行良好,实际上能够立即呈现我的无序列表,Internet Explorer 似乎在注册 JavaScript 中存在“路径”数组之前运行了我的 document.ready 函数(即使这个 jQuery包含在图像数组的代码之后)。我知道这一点,因为我在 IE 中抛出了“路径为空/未定义”错误。
当我把它从
$(document).ready(function() {
到
$(window).load(function() {
我的代码在 IE 中正常工作,因为它只在整个页面加载后才执行我的 jquery 'each' 函数(这很糟糕,因为它减慢了渲染时间并导致我正在尝试做的事情出现“滞后”......但是,嘿,如果它有效)。然而,如果网站已被缓存,IE 有时在使用 $(window).load 注册名为“paths”的数组之前仍然会触发我的每个函数。
有谁知道确保路径变量立即由 IE 注册的可靠方法,这样我的每个函数都不会失败?