В настоящее время я получаю сообщение об ошибке в коде Facebook FacePile, и я озадачен ее причиной.
facepile.php загружает скрипт, который, среди прочего, содержит следующие строки (в красивом виде):
...
o = document.createElement('script');
o.src = l[n];
o.async = true;
o.onload = h;
o.onreadystatechange = function() {
if (o.readyState in c) {
h();
o.onreadystatechange = null;
}
};
d++;
a.appendChild(o);
...
(a == document.body, d++ здесь не имеет значения)
Этот код загружает скрипт с src = http://static.ak.fbcdn.net/rsrc.php/v1/yW/r/pmR8u_Z_9_0.js
или что-то столь же загадочное (имя файла иногда меняется).
В этом скрипте есть эти строки в самом верху (также если они красиво напечатаны):
/*1331654128,176820664*/
if (window.CavalryLogger) {
CavalryLogger.start_js(["\/8f24"]);
}
window.__DEV__ = window.__DEV__ || 0;
if (!window.skipDomainLower && document.domain.toLowerCase().match(/(^|\.)facebook\..*/))
document.domain = window.location.hostname.replace(/^.*(facebook\..*)$/i, '$1');
function bagofholding() {
}
function bagof(a) {
return function() {
return a;
};
}
if (!Date.now)
Date.now = function now() {
return new Date().getTime();
};
if (!Array.isArray)
Array.isArray = function(a) {
return Object.prototype.toString.call(a) == '[object Array]';
};
...
И я получаю сообщение об ошибке, которое гласит: «SCRIPT5009: 'Дата' не определена», прямо в if (!Date.now)
часть. Отладка вблизи этой точки показывает, что Date
, Array
, Object
, Function
и т. д. не определены.
Э... как? window
существует, как и document
(хотя document.body
имеет значение null) и несколько других, но множество предопределенных объектов отсутствуют. Более ранние версии IE, похоже, не имеют этой проблемы, как и другие браузеры, но несколько компьютеров с IE9 (включая чистую виртуальную машину) имеют одну и ту же проблему.
Сомневаюсь, что смогу что-нибудь с этим поделать, но мне оченьлюбопытно, как это происходит/в чем заключается основная проблема. Кто-нибудь знает, или они могут указать мне на что-то, что может помочь?
-- изменить:
Перед публикацией этого вопроса я нашел этот сайт: http://www.guypo.com/technical/ies-premature-execution-problem/
Пока это казалось (и до сих пор кажется), что это может быть источником проблемы, я не могу воспроизвести это при каких-либо меньших обстоятельствах. Все комбинации, которые я пробовал, по-прежнему имеют дату и т. д.; что не так уж удивительно, иначе я уверен, что другие столкнутся с еще большим количеством проблем с IE.