2012-06-26 131 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

相关问题