【问题标题】:Implementing setTimeout native method实现 setTimeout 本机方法
【发布时间】:2012-10-21 12:00:41
【问题描述】:

我正在 facebook 中开发浏览器扩展,现在我的问题是 facebook 覆盖了 setTimeout 和 setInterval 原生函数,并且它们的实现在 Internet Explorer 上不起作用。

有没有办法实现这些功能?

【问题讨论】:

  • 他们对他们做了什么?为什么他们不在 IE 中工作 - 我不敢相信他们可以在没有他们的情况下编写应用程序?
  • 我猜他们以某种方式调用它们,它们在 chrome、firefox 和 safari 上确实为我工作,只有 IE 不处理那里的代码。
  • 如果它是浏览器扩展,您可以尝试在 Facebook 脚本加载之前捕获这些方法。例如var myTimeout = setTimeout ;

标签: javascript internet-explorer settimeout setinterval browser-extension


【解决方案1】:

您可以创建一个 iframe,然后访问它的 window 对象,获取新的 setTimeout 定义并覆盖全局命名空间中的那个:

var f = document.createElement('iframe');
document.body.appendChild(f);
window.setTimeout = f.contentWindow.setTimeout;
document.body.removeChild(f);  

虽然这可行,但让 2 个脚本开始覆盖彼此的变量可能不是一个好主意。我建议您让 FB 控制 setTimeout 函数,然后使用它的新副本,但不要再次覆盖它(您可以将其存储在本地 var 或全局变量名)。

【讨论】:

  • IE9 尝试访问 contentWindow 属性时拒绝访问,在 jquery 中使用 contents() 返回文档而不是窗口对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多