На последнем этапе редактирования нашей будущей книги «Антология JavaScript» я обнаружил то, что кажется ранее незаписанной ошибкой в Safari:
function preload(url) {
var img = new Image();
img.onload = function() {
alert(this); // What is this?
};
img.src = url;
}
preload('chewbacca.jpg');
В хороших браузерах, таких как Firefox, Internet Explorer 6 и Opera 8.5, приведенный выше скрипт загружает изображение, а затем отображает некоторую вариацию «[object HTMLImageElement]», которая указывает, что this
load
Однако в Safari 1.3 и 2.0 alert
this
window
Непослушное Сафари! Google, похоже, не знал об этой ошибке, когда я ее спросил. Кто-нибудь видел такое поведение, о котором сообщалось ранее?
Пока эта ошибка не будет исправлена, вы должны использовать замыкание для ссылки на объект изображения изнутри его onload
То есть ссылаются на переменную в области действия функции-обработчика.
function preload(url) {
var img = new Image();
img.onload = function() {
alert(img);
};
img.src = url;
}
preload('chewbacca.jpg');