Если вы назначили name
по номеру iframe
, большинство браузеров предоставит вам доступ к объекту iframe
10 с разрешением name
. Это отличается от ссылки на iframe
своим имуществом id
, которое даст вам ссылку на элемент iframe
(от его владельца document
), а не iframe
window
.
Простой пример: (из родительского документа)
<iframe name='iframe1Name' id='iframe1Id'></iframe>
<script>
// option 1: get a reference to the iframe element:
var iframeElem = document.getElementById('iframe1Id');
// update the element's src:
iframeElem.src = "page.html";
// option 2: get a reference to the iframe's window object:
var iframeWindow = window.iframe1Name;
// update the iframe's location:
iframeWindow.location.href = "page.html";
</script>
Давайте рассмотрим код:
parent.document.getElementById(id).src = parent.document.getElementById(id).src;
Это работает, если выполняется внутри iframe
, при условии, что вы используете правильный id
. Вы можете использовать отладчик, чтобы убедиться, что parent.document.getElementById(id)
возвращает ссылку на правильный элемент и проверит вашу консоль, чтобы проверить, не выбрасываются ли какие-либо исключения (попробуйте нажать F12). Поскольку вы не опубликовали свой полный код (включая разметку), я не могу подумать, чтобы сказать, в чем проблема.
Отладочные советы:
- проверки
parent.location.href
, чтобы убедиться, что вы обращаетесь в окно вы думаете, вы,
- проверка
parent.document.getElementId(id)
, чтобы убедиться, что вы получите объект элемента (в отличие от null
или undefined
) ,
- проверка
parent.document.getElementById(id).tagName
, чтобы убедиться, что вы используете правильный идентификатор (tagName
должен === «IFRAME»)
Эта линия:
parent.getElementById(id).location.reload();
имеет две проблемы:
getElementById()
является функцией document
, но она вызывается из parent
который является window
объектом, а
location
является свойством объекта window
. Вы пытаетесь получить доступ к элементу iframe
элемента location
, которого нет. Вам нужна ссылка на iframe
window
, а не на его элемент.
Кроме того, метод name
, есть и другие способы, чтобы получить iframe
«s объект окна:
document.getElementById('iframeId').contentWindow; // for supported browsers
window.frames["iframeName"]; // assumes name property was set on the iframe
window.frames[i]; // where i is the ordinal for the frame
Если изменение src
из iframe
элемента не работает для вас, эти другие исправления может:
parent.document.getElementById(id).contentWindow.location.reload();
или
parent.frames["yourIframeName"].location.reload(); // requires iframe name attribute
или
parent.frames[0].location.reload(); // frames of immediate parent window
или
top.frames[0].location.reload(); // frames of top-most parent window
Внимание: При использовании метода name
быть осторожным, чтобы не использовать общее значение для name
, как «дом», например, как он конфликтует с функцией FireFox называется home()
и поэтому Firefox не будет автоматически создавать ссылка на окно iframe, если оно называется home
.Наиболее надежный метод, вероятно, использовать window.frames[]
, как я считаю, что было вокруг в течение долгого времени (работает в FF/Chrome/Safari/IE6 + (по крайней мере))
Более углубленный (но довольно минимален) пример следует, испытаны в Chrome, FF, и IE:
Файл № 1: frametest.html (родительское окно)
<!DOCTYPE html>
<html>
<body>
<iframe id="frame1Id" name="frame1Name" src="frame1.html"></iframe>
<iframe id="frame2Id" name="frame2Name" src="frame2.html"></iframe>
</body>
</html>
Файл № 2: frame1.html (кадр 1 в SRC)
<!DOCTYPE html>
<html>
<body>
FRAME 1
<script>
document.body.style.backgroundColor="#ccc";
setTimeout(function(){document.body.style.backgroundColor="#fff";},100);
document.write(new Date());
</script>
<input type="button" onclick="parent.document.getElementById('frame2Id').src=parent.document.getElementById('frame2Id').src;" value="Refresh frame 2 by ID"/>
<input type="button" onclick="parent.frame2Name.location.reload();" value="Refresh frame 2 by Name"/>
</body>
</html>
Файл № 3: frame2.html (кадр 2 в SRC)
<!DOCTYPE html>
<html>
<body>
FRAME 1
<script>
document.body.style.backgroundColor="#ccc";
setTimeout(function(){document.body.style.backgroundColor="#fff";},100);
document.write(new Date());
</script>
<input type="button" onclick="parent.document.getElementById('frame1Id').src=parent.document.getElementById('frame1Id').src;" value="Refresh frame 2 by ID"/>
<input type="button" onclick="parent.frame1Name.location.reload();" value="Refresh frame 2 by Name"/>
</body>
</html>
Этот пример демонстрирует, как определить и манипулировать iframe
S с помощью id
и name
, и как влияют друг на iframe
изнутри другого iframe
. В зависимости от настроек браузера может применяться политика происхождения, но вы уже сказали, что ваш контент был из одного домена, поэтому вы должны быть в порядке.
Являются ли оба фреймы отправлены из того же домена, что и ваш php-скрипт? Вы не можете изменять другие фреймы домена. – Skarlinski
Да, они есть. Извините, я забыл включить это. –
Что произойдет, если вы запустите команду refresh ("idString") вручную ftom-консоли после завершения первого окончания iframe? – Skarlinski