前提条件:
我有一个内嵌iframe的aspx页面。这个iframe指向MVC在同一站点(它的混合站点,标准ASP.NET和ASP.NET MVC)处理的url。由MVC呈现的结果页面包含许多脚本引用。
问题:
IE9会在iframe中加载的每个脚本上抛出异常。这些例外与此类似:
Error: 'Function' is undefined
也就是说,它说每个窗口最基本的东西都不存在。点击完所有这些弹出窗口后,页面就会按照设计工作!
如果我直接在浏览器中加载<iframe />
src属性中的URL,则一切都按预期工作
如果我在另一个浏览器中打开页面(我试过Opera,Firefox),一切都按预期工作 - 没有错误。
那么,IE9想要什么?
答案 0 :(得分:28)
关于此错误(或功能)有this msdn page。
在DOM中移动iframe元素时会出现这些错误。在这种情况下,IE 9垃圾会收集iframe(导致您的未定义错误)并在另一个位置重新加载。
通常,您应该创建元素,仅将<{1>}属性设置为一次,然后将其放在DOM树中一次。它与在iframe中运行的代码无关。
答案 1 :(得分:2)
我在野外遇到过同样的情况。基本症状:
我发现通常可以通过延迟脚本代码的执行直到onload或DOMContentLoaded来防止...我知道的帮助不大但这是我遇到过的最困难的IE脚本错误之一。我提高了你的问题的分数,希望其他人也能找到它,我们可以得到更详细的答案。
答案 2 :(得分:2)
将以下脚本块放在iFrame html&lt; head&gt;的最顶部似乎在我的情况下解决了这个问题。基本上,它强制iframe重新加载,正如一些人已经指出的那样,它解决了这个问题。它似乎相对安全,因为没有“对象”这样的东西。和&#39;日期&#39;,javascript基本没用。
<script type="text/javascript">
if(typeof(Object)==="undefined"){
window.location.reload();
}
</script>
答案 3 :(得分:1)
尝试在加载完整网页后加载javascript。我觉得即使在iframe完全加载之前脚本也在执行。
对于IE9中脚本的一些建议,请查看下面的给定链接 http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more.aspx
答案 4 :(得分:1)
进一步的调查显示,解决方法是在设置'src'属性之前将违规的iframe添加到它的dom位置。
设置'src'后,更改DOM堆栈中iframe的位置会强制IE9进行垃圾收集。
一旦'src'被设置,iframe可以通过css定位调整大小并改变,但不能改变DOM堆栈中的相对位置。
通常情况下,像对话框和灯箱这样的插件会填充一个iframe,其中src已经设置到dom中,然后追加/ prepend或其他任何内容,从而触发GC。
答案 5 :(得分:0)
function waitForjQuery(){
if(typeof jQuery!='undefined'){
//Do yor stuff!
}
else{
setTimeout(function(){
waitForjQuery();
},500);
}
}
waitForjQuery();