2009-11-02 20 views

Odpowiedz

1

Jeśli element iframe znajduje się w innej domenie niż strona zewnętrzna, z dużą trudnością lub wcale.

Ogólnie przeglądarka uniemożliwia javascriptowi uzyskanie dostępu do kodu z innej domeny, ale jeśli kontrolujesz obie strony, jest kilka hacków, aby coś działało. Mniej więcej.

Na przykład można zmienić fragment adresu URL ramki iFrame z zewnętrznego, odpytać fragment wewnątrz elementu iframe i wywołać tę funkcję. Podobna jest sztuczka z nazwą okna.

0

Możesz uzyskać dostęp do iframe z jego imię:

foo.putme(); 

Funkcje zadeklarowane globalnie wewnątrz strony iframe staną się członkami obiektu window dla tego iframe. Możesz uzyskać dostęp do obiektu okna elementu iframe za pomocą nazwy elementu iframe.

Aby to zadziałało, twój iframe musi mieć atrybut name:

<iframe name="foo" ...> 

Ponadto, strona główna i strona iframe powinien być z tej samej domeny.

+1

I debuguje go w firebug i mówi: m.contentwindow.putmap nie jest funkcją – jamal

0

Nadaj ramce nazwę i identyfikator - identyczne. window.frameNameOrId_.functionName()

Obie ramy muszą być w tej samej domenie (choć istnieją sposoby obejścia tego w ograniczonym stopniu)

1

Na ramek, należy podać nazwę i ramki na stronie głównej ty może uzyskać dostęp do ramki przez jej podaną nazwę:

okno. [Nazwa-ramki] .putme();

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

Należy zauważyć, że zwykle działa to tylko w przypadku, gdy element iframe odnosi się do strony w tej samej domenie. Przeglądarki ograniczają dostęp do stron w ramkach należących do innej domeny ze względów bezpieczeństwa.

3

Dla jeszcze większej solidności:

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; 
} 

i

... 
var el = document.getElementById('targetFrame'); 

getIframeWindow(el).putme(); 
... 
0

Można to zrobić za pomocą JavaScript:

window.top.location.href = url; 

działa idealnie we wszystkich głównych przeglądarkach.

Powiązane problemy