«Дата» не определена в IE9 в JavaScript, загруженном FacePile - PullRequest
14 голосов
/ 14 марта 2012

В настоящее время я получаю сообщение об ошибке в коде 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 является нулевым) и несколько других, но множество предопределенных объектов - нет.Более ранние версии IE, похоже, не имеют этой проблемы, как и другие браузеры, но у нескольких компьютеров, работающих под управлением IE9 (включая чистую виртуальную машину), есть одна и та же проблема.

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

- редактировать:

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

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

Ответы [ 2 ]

1 голос
/ 25 августа 2012

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

1 голос
/ 13 июля 2012

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

...