Задать вопрос

Вызов js скрипта из iframe?

Есть страница site.ru/index.htm.

На этой странице есть iframe, где отображается страница из поддомена, например такой

[iframe src='http://xxx.site.ru/index.htm'][/iframe]

Как из скрипта, который лежит на странице xxx.site.ru/index.htm вызвать функцию, которая лежит на странице site.ru/index.htm?

Доступ к исходникам имеется.
  • Вопрос задан
  • 11577 просмотров
Подписаться 7 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 7
@AigizK Автор вопроса
Если бы основная страница и страница из iframe имели одинаковый домен, то вызвать можно было бы так

window.top.needed();

Но т.к. в iframe у нас отображается страница из поддомена, то так делать не получится.
Но оказывается это можно обойти, изменив домен на основной странице и на странице iframe и выставить у обоих домен от корневого сайта. Тогда js функции можно вызвать так
window.top.needed();
Подробнее здесь
Ответ написан
Комментировать
@niko83
Прочтите эту статью dklab.ru/chicken/nablas/58.html в конце также не забудьте посмотреть полезные ссылки.
Ответ написан
Antimony
@Antimony
easyXDM решает такие проблемы и, что приятно, кроссбраузерно.
Ответ написан
Комментировать
TERMIK
@TERMIK
Вы можете решить альтернативно, т.е. считать результат выполнения этой функции с нужной страницы. Этот вариант решения вас устоит? Если да, то я его Вам напишу.
Ответ написан
TERMIK
@TERMIK
Этот скрипт Вы пишете на странице, на которой выполняется эта функция:
Ответ написан
Комментировать
TERMIK
@TERMIK
function getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject(«Msxml2.XMLHTTP»);
} catch (e) {
try {
xmlhttp = new ActiveXObject(«Microsoft.XMLHTTP»);
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

function getrec(set_any_result) {
var xmlhttp = getXmlHttp();
xmlhttp.open(«GET», \' xxx.site.ru/index.htm?set_any_result='+set_any_result+'\');
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
window.parent.frames[1].document.close();
window.parent.frames[1].document.open();
window.parent.frames[1].document.write(xmlhttp.responseText);

}
}
xmlhttp.send();
}
Ответ написан
TERMIK
@TERMIK
Можно, правда, использовать менее рациональный, но более понятный вариант. Можно обмениваться результатом с другой страницей через невидимые текстовые поля. Ну например, так:


главное окно







окно с текстом

текст именованного окна

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы