2013-03-26 2 views
0

У меня есть иерархия iframe с родительским типом уровня на моих HTML-страницах. Я хочу получить объект документа родительского окна в его дочернем документе для некоторых манипуляций. Я отлично работаю с Google Chrome.parent.document не задан в Chrome

parent.document предоставляет «неопределенный» в Google Chrome, а в Mozilla - отлично. В чем подвох?

Для справки, пожалуйста, найти ниже содержание трех файлов, демонстрирующих проблему,

Первый файл: 'one.html'

<html> 
<head> 
</head> 
<body> 
    <input type="hidden" id="one_1" name="one_1" /> 
    <iframe id="one" name="one" src="two.html"> 
</body> 
</html> 

Второй файл: 'two.html'

<html> 
<head> 
</head> 
<body> 
    <input type="hidden" id="two_1" name="two_1" /> 
    <iframe id="two" name="two" src="three.html"> 
</body> 
</html> 

Третий файл: 'three.html'

<html> 
<head> 
<script type="text/javascript"> 

    function callme() { 
     alert(parent.document) 
     alert(top.document) 
    } 
</script> 
</head> 
<body> 
    <input type="hidden" id="three_1" name="three_1" /> 
    <button id="click" name="click" onclick="return callme()">Click Me</button> 
</body> 
</html> 

Предполагая, что «one.html» открыт с Google Chrome, когда я нажимаю на кнопку «Click Me», два последовательных окна предупреждения появляется с «Неопределенные» значение. Когда я открываю «one.html» в Mozilla, он дает два «предупреждающих поля» objectHTMLDocument.

Вы найдете ниже консольных сообщений при нажатии на 'Click Me' кнопку,

Unsafe JavaScript attempt to access frame with URL file:///C:/Users/user/Desktop/two.html from frame with URL file:///C:/Users/user/Desktop/three.html. Domains, protocols and ports must match. 
                   three.html:6 
callme               three.html:6 
onclick               three.html:13 

Unsafe JavaScript attempt to access frame with URL file:///C:/Users/user/Desktop/one.html from frame with URL file:///C:/Users/user/Desktop/three.html. Domains, protocols and ports must match. 
                   three.html:7 
callme               three.html:7 
onclick               three.html:13 

Спасибо заранее.

+0

Ловушка ['contentDocument'] (https://developer.mozilla.org/en-US/docs/HTML/Element/iframe#Scripting). – bfavaretto

+0

@bfavaretto только что проверил с contentDocument, все еще нет выигрыша :( – dsharma4u29

+0

Не могли бы вы показать свой код? – bfavaretto

ответ

0

Я бы вводил сверху вниз, а не к восходящему. Я бы установить переменный в качестве плавающего фрейма, выбрав его и хранить его в переменный следующем образом:

var frame = document.getElementById('one'); 

А затем вводит ссылку на родитель:

frame.contentWindow.frame_parent_reference = window; 

А затем выполнить это в следующем дочерний iFrame заменяет «один» на «два». Таким образом, с помощью third.html, мы не просим родителей или сверху, но можно сделать следующее:

alert(frame_parent_reference.document); 
alert(frame_parent_reference.frame_parent_reference.document); 

Возможно, не очень элегантно, но это, безусловно, дает вам много контроля (и вы можете проверить, для обеспечения безопасности существует специальная ссылка).

Удачи вам!