Я попал в действительно странную ситуацию.У меня есть следующие настройки:
В родительском окне есть объект "панель", который включает в себя 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>
Первый дочерний кадр загружает простой XML-файл с помощью AJAX:
<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 мы видим, как три свойства срабатывают два раза: один раз в _child1 и второй в _child2.Однако в IE9 мы видим только 5 предупреждений!
И причина этого в том, что parent.foo.doc
по какой-то причине выдает «Отказано в доступе».
Я считаю, что причина в том, что IE как-то «помнит», что документ XML был создан впервый дочерний кадр (возможно, по соображениям производительности) и когда второй дочерний кадр пытается получить доступ к этому объекту, IE не может его найти (или сохраняет в ограниченном стеке памяти).
Более того, когда япопробовал этот сценарий без перенаправления - просто поместив эти два дочерних фрейма в родительский фрейм - у второго дочернего фрейма не было проблем с доступом к XML-документу родителей.
Одним из обходных путей может быть клонированиеэти XML-документы внутри «родителей» до назначения, но у нас есть много подобных сценариев, и сначала я хотел бы спросить, есть ли у кого-нибудь идея получше?
Спасибо.