2010-04-27 59 views
2

我在IE上遇到了一个有趣的(?)YUI rich edit demo问题。当查看window对象作为用作浏览器的内容可编辑框架时,我发现eval函数未定义(通过运行以下代码)。为什么这个窗口对象没有eval函数?

javascript:alert(document.getElementById("editor_editor").contentWindow.eval) 

这只是发生在IE浏览器(我查了IE6和IE8),并且它不会在Firefox或Chrome发生。

所有其他window功能和性能似乎是为了,现在我认识到,eval不是真的window但全球对象上定义,但我的理解是,在浏览器中window全球对象(也是eval确实出现在所有其他窗口中,为什么不在这个窗口上?)。

有没有人知道这是一个知道错误/限制在IE浏览器,我怎么可以在这个框架的全球对象的上下文eval? (我需要副作用可用于此框架内运行的任何内容)。

+0

不是故意嘟嘟的* EVAL是EVAL *喇叭在这里,但也许有另一种方法来实现你想要做的事情,而不使用'eval'? – 2010-04-27 11:06:29

+2

没有人会和你争辩,* eval是eval * ... – 2010-04-27 11:13:48

回答

3

我发现了一段时间后,你可以做eval奇迹般地出现在IE的iframe的window对象通过execScript第一:

function evalIframe(iframeWin, command) { 
    if (!iframeWin.eval && iframeWin.execScript) { 
     iframeWin.execScript("null"); 
    } 
    if (iframeWin.eval) { 
     iframeWin.eval(command); 
    } else { 
     alert("No eval!"); 
    } 
} 
+0

谢谢蒂姆,我试过了,得到了“访问被拒绝”:'javascript:try {document.getElementById(“editor_editor”)。contentWindow.execScript ('null')} catch(ex){alert(ex.message)}' – Motti 2010-04-27 11:08:23

+0

哦。这对我在动态创建的iframe上工作。我希望'eval'不要那么工作。我所能想到的是,这可能是因为YUI编辑器正在使用'data:'URL作为iframe的'src',这可能导致IE阻止访问,因为iframe URL正在使用不同的协议文档的URL。 – 2010-04-27 11:29:14

+0

当我看看'src'时,我在IE中看到'javascript:false'(数据:...为Firefox而不是IE),我会继续挖掘。 – Motti 2010-04-27 12:21:37

相关问题