"Дата" - undefined в IE9 в javascript, загруженном FacePile

В настоящее время я получаю сообщение об ошибке в Facebook FacePile, и я сбиваю с толку причину.

facepile.php загружает a script, который, между прочим, имеет эти строки (при печати):

...
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 ++ здесь неактуальен)

Этот код загружает script с помощью src= http://static.ak.fbcdn.net/rsrc.php/v1/yW/r/pmR8u_Z_9_0.js или что-то в равной степени загадочное (иногда изменяется имя файла).

В этом script эти строки находятся на самом верху (также при печати):

 /*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:" Дата "undefined", прямо в части if (!Date.now). Отладка рядом с этой точкой показывает, что Date, Array, Object, Function и т.д. Все undefined.

Э... как? window существует, как и document (хотя document.body равно null) и несколько других, но много предопределенных объектов нет. Более ранние версии IE, похоже, не имеют этой проблемы и других браузеров, но на нескольких компьютерах, работающих под IE9 (включая чистую виртуальную машину), есть одна и та же проблема.

Я сомневаюсь, что я могу что-то с этим поделать, но мне очень любопытно, как это происходит/какова основная проблема. Кто-нибудь знает, или они могут указать мне на что-то, что может помочь?

- изменить:

До публикации этого вопроса я нашел этот сайт: http://www.guypo.com/technical/ies-premature-execution-problem/

Пока он казался (и до сих пор), как будто это может быть источником проблемы, я не могу воспроизвести его ни при каких меньших обстоятельствах. Все комбинации, которые я пробовал, все еще имеют дату и т.д.; что не слишком удивительно, так как в противном случае я уверен, что другие будут видеть больше проблем с IE.

Ответ 1

Если вы перейдете к отладчику javascript в первой точке, любой JS будет запущен. В то же время добавьте часы для Date/Array и т.д., И обратите внимание, когда он перейдет к нулевому значению. Может быть медленным и трудоемким, но я не понимаю, почему это не сработает.

Ответ 2

Вы можете попробовать добавить script в функцию document.ready. Другими словами, убедитесь, что FB script обрабатывается только после готовности DOM. Но, основываясь на ссылке, которую вы передаете Гаю Под (отличная статья, кстати), кажется, что вы правы в утверждении, что IE загружает и выполняет script досрочно (отсюда мое предложение добавить обертку так что он выполняется только после события готовности DOM). IE9, вероятно, изолирует исполняемый файл script (вне области документа/окна).