Actualmente estoy recibiendo un error dentro del código FacePile de Facebook, y estoy desconcertado por la causa.'Fecha' no está definida en IE9 en javascript cargado por FacePile
facepile.php carga un script que, entre otras cosas, tiene estas líneas (cuando se imprime bastante-):
...
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);
...
(un document.body ==, d ++ es irrelevante aquí)
Este código carga un script con src = http://static.ak.fbcdn.net/rsrc.php/v1/yW/r/pmR8u_Z_9_0.js
o algo igualmente críptico (el nombre del archivo cambia ocasionalmente).
En ese guión, existen estas líneas en la parte superior (también cuando muy impresos):
/*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]';
};
...
Y estoy recibiendo un error que dice "SCRIPT5009: 'Date' no está definido", justo en la parte if (!Date.now)
. La depuración cerca de ese punto revela que Date
, Array
, Object
, Function
, etc. no están definidos.
Er ... ¿cómo? window
existe, al igual que document
(aunque document.body
es nulo) y un puñado de otros, pero muchos de los objetos predefinidos no lo son. Las versiones anteriores de IE no parecen tener este problema, ni tampoco otros navegadores, pero varias máquinas que ejecutan IE9 (incluida una VM limpia) tienen el mismo problema.
Dudo que pueda hacer algo al respecto, pero estoy muy curioso cómo está sucediendo esto/cuál es el problema subyacente. ¿Alguien sabe, o pueden señalarme algo que podría ayudar?
- edit:
Antes de la publicación de esta pregunta, que había encontrado en este sitio: http://www.guypo.com/technical/ies-premature-execution-problem/
Aunque parecía (y aún lo hace) que podría ser el origen del problema, no puedo t replicarlo bajo cualquier circunstancia menor. Todas las combinaciones que he intentado todavía tienen definida la fecha, etc. lo que no es demasiado sorprendente, ya que de lo contrario, estoy seguro de que otros verían muchos más problemas con IE.
Objetos incorporados como Fecha, Matriz, etc. siempre deben estar disponibles en el contexto global. ¿Cómo se puede ejecutar una función si no hay un constructor de funciones? Extraño tema de hecho. – RobG
intente sin "o.async = true;" –
No puedo, esto está en el código de Facebook, y no he podido reproducirlo con ninguno de los míos (aunque no he intentado duplicarlo todo, puedo hacerlo más adelante). A menos que IE9 tenga alguna manera de editar el javascript que se está ejecutando actualmente. – Groxx