2009-11-02 7 views

ответ

1

Если iframe находится в другом домене, чем внешняя страница, с большим трудом или совсем нет.

В целом браузер не позволяет javascript получать доступ к коду из другого домена, но если вы контролируете обе страницы, есть некоторые хаки, чтобы что-то сработало. Более или менее.

Например, вы можете изменить фрагмент URL-адреса iFrame из внешнего, опросить фрагмент внутри iframe и вызвать эту функцию. Аналогичный трюк с именем окна.

0

Вы можете получить доступ к IFRAME с его именем:

foo.putme(); 

Функции, объявленной глобально внутри страницы IFrame станут членами оконного объекта для этого фрейма. Вы можете получить доступ к оконному объекту iframe с именем iframe.

Для этой работы, ваш IFrame должен иметь атрибут имя:

<iframe name="foo" ...> 

Кроме того, главная страница и страница IFrame должна быть из того же домена.

+1

Я отлаживаю его в firebug, и он говорит: m.contentwindow.putmap не является функцией – jamal

0

Дайте кадру имя и идентификатор - оба идентичны. window.frameNameOrId_.functionName()

Оба кадра должны быть в том же домене (хотя есть способы обойти это в ограниченной степени)

1

На фрейме укажите имя для вашего кадра, и на главной странице может получить доступ к кадру по его названию:

окно. [FrameName] .putme();

8
window.frames['frameName'].putme(); 

Обратите внимание, что это обычно работает, только если iframe ссылается на страницу в том же домене. Из-за соображений безопасности браузеры ограничивают доступ к страницам в рамках фреймов, принадлежащих другому домену.

3

Для еще большей надежности:

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(); 
... 
0

Это можно сделать с помощью JavaScript:

window.top.location.href = url; 

отлично работает во всех основных браузерах.

Смежные вопросы