4

我正在浏览器扩展在Facebook上工作,现在我的问题是,Facebook重写setTimeout & setInterval本机函数,并且它们的实现在Internet Explorer上不起作用。实现setTimeout本机方法

有没有一种方法来实现这些功能?

+0

他们对他们做了什么?他们为什么不在IE中工作 - 我不相信他们可以在没有他们的情况下编写应用程序? – Bergi

+0

我猜他们以某种方式调用它们,它们在Chrome和Firefox和safari上为我工作,只有IE无法处理代码。 –

+0

如果它是浏览器扩展,您可以尝试在Facebook脚本加载之前捕获这些方法。例如'var myTimeout = setTimeout;' – ColBeseder

回答

5

您可以创建一个iframe,然后访问它的window对象,获得新setTimeout定义并覆盖一个在全局命名空间:虽然这个工程

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

,它可能不是2个脚本的好IDEEA开始重写对方的变量。我建议你让FB到控制setTimeout函数,并且使用它的新副本,但不要再覆盖它(可以将其存储在本地变量或其他名称的全局变量中)。

+0

IE9当我尝试访问contentWindow属性时,使用jquery中的contents()返回文档而不是窗口对象时抛出访问被拒绝。 –