javascript - 在 FacePile 加载的 javascript 中,IE9 中的“日期”未定义

标签 javascript facebook internet-explorer-9 facebook-social-plugins

我目前在 Facebook 的 FacePile 代码中遇到错误,我对原因感到困惑。

facepile.php 加载一个脚本,除其他外,该脚本具有以下行( pretty-print 时):

...
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]';
  };
...

我在 if (!Date.now) 部分收到一条错误消息,提示“SCRIPT5009:‘Date’未定义”。在该点附近进行调试会发现 DateArrayObjectFunction 等都是未定义的。

呃……怎么样? window 存在,document(尽管 document.body 为 null)和一些其他对象也存在,但大量预定义对象不存在吨。 IE 的早期版本似乎没有这个问题,其他任何浏览器也没有,但是运行 IE9 的多台机器(包括一个干净的 VM)都有同样的问题。

我怀疑我对此无能为力,但我非常很好奇这是怎么发生的/潜在的问题是什么。有谁知道,或者他们能告诉我一些可能有用的东西吗?

-- 编辑:

在发布这个问题之前,我找到了这个网站:http://www.guypo.com/technical/ies-premature-execution-problem/

虽然看起来(现在仍然如此)它可能是问题的根源,但我无法在任何更小的情况下复制它。我尝试过的所有组合仍然定义了日期等;这不足为奇,否则我相信其他人会看到更多 IE 问题。

最佳答案

如果您在第一个点使用 javascript 调试器单步执行,则任何 JS 都会运行。同时为日期/数组等添加一个 watch ,并注意它何时变为空。可能会很慢而且费力,但我不明白为什么它不起作用。

关于javascript - 在 FacePile 加载的 javascript 中,IE9 中的“日期”未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9695099/

相关文章:

javascript - AngularJS - 在方法内丢失 Controller 范围

node.js - 如何使用 Facebook Graph API 发布视频

iphone - 在 facebook 中使用 fbgraph 签到

javascript - ie9 错误 : 'Blob' is undefined

javascript - 如何使用正则表达式来测试具有特殊字符的文件名

javascript - Angular 形式自定义验证器消息导致错误

javascript - 如何使 jQuery insideHTML 变化淡入淡出过渡

javascript - React JS setState 数组

html - IE9 中的选择框自定义

html - Internet Explorer 兼容性灾难