У меня есть страница с iframe. Внутри этого фрейма у меня есть яваскрипт функция:Вызов функции внутри iframe извне iframe
function putme() {}
Как я могу назвать эту функцию на главной странице?
У меня есть страница с iframe. Внутри этого фрейма у меня есть яваскрипт функция:Вызов функции внутри iframe извне iframe
function putme() {}
Как я могу назвать эту функцию на главной странице?
Если iframe находится в другом домене, чем внешняя страница, с большим трудом или совсем нет.
В целом браузер не позволяет javascript получать доступ к коду из другого домена, но если вы контролируете обе страницы, есть некоторые хаки, чтобы что-то сработало. Более или менее.
Например, вы можете изменить фрагмент URL-адреса iFrame из внешнего, опросить фрагмент внутри iframe и вызвать эту функцию. Аналогичный трюк с именем окна.
Вы можете получить доступ к IFRAME с его именем:
foo.putme();
Функции, объявленной глобально внутри страницы IFrame станут членами оконного объекта для этого фрейма. Вы можете получить доступ к оконному объекту iframe с именем iframe.
Для этой работы, ваш IFrame должен иметь атрибут имя:
<iframe name="foo" ...>
Кроме того, главная страница и страница IFrame должна быть из того же домена.
Дайте кадру имя и идентификатор - оба идентичны. window.frameNameOrId_.functionName()
Оба кадра должны быть в том же домене (хотя есть способы обойти это в ограниченной степени)
На фрейме укажите имя для вашего кадра, и на главной странице может получить доступ к кадру по его названию:
окно. [FrameName] .putme();
window.frames['frameName'].putme();
Обратите внимание, что это обычно работает, только если iframe ссылается на страницу в том же домене. Из-за соображений безопасности браузеры ограничивают доступ к страницам в рамках фреймов, принадлежащих другому домену.
Для еще большей надежности:
function getIframeWindow(iframe_object) {
var doc;
if (iframe_object.contentWindow) {
return iframe_object.contentWindow;
}
if (iframe_object.window) {
return iframe_object.window;
}
if (!doc && iframe_object.contentDocument) {
doc = iframe_object.contentDocument;
}
if (!doc && iframe_object.document) {
doc = iframe_object.document;
}
if (doc && doc.defaultView) {
return doc.defaultView;
}
if (doc && doc.parentWindow) {
return doc.parentWindow;
}
return undefined;
}
и
...
var el = document.getElementById('targetFrame');
getIframeWindow(el).putme();
...
Это можно сделать с помощью JavaScript:
window.top.location.href = url;
отлично работает во всех основных браузерах.
Я отлаживаю его в firebug, и он говорит: m.contentwindow.putmap не является функцией – jamal