2012-06-26 129 views
0
if (window.parent.frames['scripts1']) { 
    if (window.parent.frames['scripts1'].document.documentElement) { 
    var strSCRIPT = window.parent.frames['scripts1'].document.documentElement.textContent; 
    if ((strSCRIPT.lastIndexOf('bbbbEND') - strSCRIPT.length) != -7) { 
     window.parent.frames['scripts1'].document.location.href = 'test1.txt?refresh=' + Date(); 
    } 
    } else { 
    window.parent.frames['scripts1'].document.location.href = 'test1.txt?refresh=' + Date(); 
    } 
} 

我已經嘗試了很多東西,但沒有成功編寫跨瀏覽器的東西。如何將此javascript代碼轉換爲jquery

+13

,如果它的工作原理,爲什麼要修復呢? – Alnitak

+3

[你嘗試過什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+0

IIRC,通過JS交叉框架不會在所有瀏覽器的支持。這也似乎是一個非常複雜和可能很慢的方式來刷新內容... –

回答

0

下面是一些jQuery的概念性材料,讓你開始:

// make sure to give your frame an ID, and then it's easy to access 
var frame_a = $("#frame_a");   

// jQuery's content() function seems to only work on iFrames, not on Frames 
var frame_a_document = $(frame_a[0].contentDocument);   

var frame_a_document_body = frame_a_document.find("body"); 
var frame_a_text = $(frame_a_document_body).text();   

alert(frame_a_text); 

記住這個重要的事實:你的在父文檔完成之後加載框架,這意味着ready()函數將在加載框架之前執行。如果你嘗試在你的ready()函數中訪問你的框架,很可能你什麼也得不到,因爲它還沒有被加載 - 也就是說它是競爭條件。

2

首先,重構代碼,以消除重複:

var s = window.parent.frames['scripts1']; 
if (s) { 
    var d = s.document; 
    var e = d.documentElement; 
    var t = e ? e.textContent : null; 
    if (!t || t.length - t.lastIndexOf('bbbbEND') != 7) { 
     d.location.href = 'test1.txt?refresh=' + Date(); 
    } 
} 

有一個確定的兼容性問題,但至少現在我們已經有了察覺它的機會!

具體來說,.textContent不IE8支持或更早,因此:

var s = window.parent.frames['scripts1']; 
if (s) { 
    var d = s.document; 
    var e = d.documentElement; 
    var t = e ? (e.textContent || e.innerText) : null; 
    if (!t || t.length - t.lastIndexOf('bbbbEND') != 7) { 
     d.location.href = 'test1.txt?refresh=' + Date(); 
    } 
} 
+0

'.textContent'並非與所有常用的瀏覽器兼容,但至少您提供代碼的積極改進。 – 2012-06-26 16:23:21

+0

@amnotiam嗯,也許有一些適用於jQuery的範圍,那麼!啊,只有IE8和更低,不支持它。 – Alnitak

+0

好吧,如果這是唯一需要的兼容性補丁,那麼我會說jQuery將會是巨大的矯枉過正。我寧願看到一個快速的'||而不是e.innerText'。 ...是的,IE8和更低版本將是唯一的問題。不幸的是,IE8仍然有重要的用途,雖然不斷減少。 – 2012-06-26 16:25:44

相關問題