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()返回文檔而不是窗口對象時拋出訪問被拒絕。 –