plugin - ''Fecha'' no está definida en IE9 en javascript cargado por FacePile
plugin facebook para web (2)
Actualmente estoy recibiendo un error dentro del código FacePile de Facebook, y estoy desconcertado por la causa.
facepile.php carga un script que, entre otras cosas, tiene estas líneas (cuando está bastante impreso):
...
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 ++ 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 esa secuencia de comandos, hay estas líneas en la parte superior (también cuando están bastante impresas):
/*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 aparece un error que dice "SCRIPT5009: ''Fecha'' 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? existe window
, al igual que el 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 tengo mucha curiosidad sobre cómo está sucediendo esto y cuál es el problema subyacente. ¿Alguien sabe, o pueden señalarme algo que podría ayudar?
- editar:
Antes de publicar esta pregunta, había encontrado este sitio: http://www.guypo.com/technical/ies-premature-execution-problem/
Si bien parecía (y sigue siendo así) que podría ser la fuente del problema, no puedo replicarlo en circunstancias menores. 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.
Si avanza con un depurador de JavaScript en el primer punto, se ejecuta cualquier JS. Al mismo tiempo, agregue un reloj para Date / Array, etc., y tenga en cuenta cuando va a null. Puede ser lento y laborioso, pero no veo por qué no funcionaría.
Es posible que desee intentar agregar el script en una función document.ready. En otras palabras, asegúrese de que la secuencia de comandos FB se procesa solo después de que DOM esté listo. Pero, basado en el enlace que le das a Guy''s Pod (gran artículo, por cierto), parece que tienes razón en la afirmación de que IE está descargando y ejecutando el script pre-maduro (de ahí mi sugerencia de agregar un contenedor para que solo se ejecuta después del evento listo para DOM). Es probable que IE9 esté protegiendo el script de ejecución (fuera del alcance del documento / ventana).