我是一名有用的助手,会进行文本翻译。
我遇到了一个非常奇怪的情况。以下是我的设置:
父窗口拥有一个名为“bar”的对象,其中包含一个XML文档和几个其他属性:
在成功时,它会在父窗口中创建一个“bar”实例,并将其存储在“foo”变量中,该变量再次驻留在父窗口中。
然后它(成功地)输出这些属性并重定向到第二个子框架。
第二个子框架尝试访问父框架中的“foo”对象,并输出其属性:
现在有趣的事情发生了:在FF和Chrome中,我们看到3个属性在_child1和_child2中分别触发两次。然而,在IE9中,我们只看到5个警报!
原因是parent.foo.doc由于某种原因引发“权限被拒绝”。
我认为原因是IE“记住”xml文档是在第一个子框架中创建的(可能出于性能原因),当第二个子框架尝试访问该对象时,IE无法找到它(或将其存储在受限制的内存堆栈中)。
此外,当我尝试这种情况而没有重定向-只是将那两个子帧放在父帧中一起时-第二个子帧没有问题访问父级的xml文档。
一种解决方法是在“父级”内部分配之前克隆这些xml文档,但我们有许多这样的场景,首先我想问是否有更好的想法?
谢谢。
我遇到了一个非常奇怪的情况。以下是我的设置:
父窗口拥有一个名为“bar”的对象,其中包含一个XML文档和几个其他属性:
<html>
<head>
<script type="text/javascript">
var foo=null; //used in most report pages
var bar=function(document, boo){
this.doc=document;
this.boo=boo;
this.baz="serge";
};
</script>
<head>
<body>
<iframe src="_child1.html"></iframe>
</body>
</html>
第一个子框架通过ajax加载一个简单的xml文件:
<html>
<head>
<script src="../lib/jquery.min.js"></script>
<script type="text/javascript">
$.ajax({
url: "books.xml",
type: "get",
dataType: "xml",
success: function(data) {
var boo = {
name: "boo"
};
parent.foo = new parent.bar(data, boo);
alert(parent.foo.boo.name);
alert(parent.foo.baz);
alert(parent.foo.doc.firstChild.nodeName);
window.location = "_child2.html";
}
});
</script>
</head>
<body>
child1
</body>
</html>
这个 XML 是:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
Vaidyanathan Nagarajan
</bookstore>
在成功时,它会在父窗口中创建一个“bar”实例,并将其存储在“foo”变量中,该变量再次驻留在父窗口中。
然后它(成功地)输出这些属性并重定向到第二个子框架。
第二个子框架尝试访问父框架中的“foo”对象,并输出其属性:
<html>
<head>
<script src="../lib/jquery.min.js"></script>
<script type="text/javascript">
alert(parent.foo.boo.name);
alert(parent.foo.baz);
alert(parent.foo.doc.firstChild.nodeName);
</script>
</head>
<body>
child2
</body>
</html>
现在有趣的事情发生了:在FF和Chrome中,我们看到3个属性在_child1和_child2中分别触发两次。然而,在IE9中,我们只看到5个警报!
原因是parent.foo.doc由于某种原因引发“权限被拒绝”。
我认为原因是IE“记住”xml文档是在第一个子框架中创建的(可能出于性能原因),当第二个子框架尝试访问该对象时,IE无法找到它(或将其存储在受限制的内存堆栈中)。
此外,当我尝试这种情况而没有重定向-只是将那两个子帧放在父帧中一起时-第二个子帧没有问题访问父级的xml文档。
一种解决方法是在“父级”内部分配之前克隆这些xml文档,但我们有许多这样的场景,首先我想问是否有更好的想法?
谢谢。