2010-03-31 12 views
6

HI, Zaskakująco znalazłem problemy w przeglądarce Chrome w wywołaniu funkcji nadrzędnego javascript okna. Jeśli mam okno z funkcji javascript zdefiniowane w nimJak wywołać funkcję okna nadrzędnego w przeglądarce Chrome?

<script type="text/javascript"> 
    function dolink() { 
    . . . 
    } 
</script> 

i mam iframe wewnątrz tego okna sprawia, że ​​to wezwanie jQuery

<script type="text/javascript"> 
$(function() { 
     $('a.arglink').click(function() { 
     window.parent.dolink($(this).attr('href')); 
     return false; 
     }); 
}); 
</script> 

wywołanie dolink funkcji nie działa. Krok po kroku z chromosomowym debuggerem javascript wygląda na to, że window.parent.dolink ma wartość undefined. Jest to projekt lub błąd, który popełniłem? W przeglądarkach Firefox i IE działa dobrze.

+0

Czy iframe na tej samej domenie co dokumentu nadrzędnego? –

+0

tak, na tej samej domenie –

Odpowiedz

10

Wreszcie znalazłem!

Wygląda na to, że przeglądarka Chrome nie zezwala na odwoływanie się do okna nadrzędnego uzyskującego dostęp do stron z protokołem :. W rzeczywistości przetestowałem powyższy kod z plikami na moim komputerze, więc z adresem URL takim jak file:///C:/mytests/mypage.html. Jeśli umieściłem tę stronę na serwerze sieci Web, wszystko działa zgodnie z oczekiwaniami.

+2

Mam ten sam problem z chromem, ale nie używam żadnego protokołu plików, to jest czysty http – lisak

+1

właśnie go przetestowałem, to nie działa: C // Chcę odzyskać moje konto – almosnow

2

Co na temat korzystania frameElement i ownerDocument

<script type="text/javascript"> 
$(function() { 
     $('a.arglink').click(function() { 
     window.frameElement.ownerDocument.parentWindow.dolink($(this).attr('href')); 
     return false; 
     }); 
}); 
</script> 
+0

nie działa na żadnej przeglądarce –

+0

prawda, zapomniałem o czymś – Alsciende

4

należy zadzwonić kod jak ten

if(function != undefined) 
{ 
$(function() { 
     $('a.arglink').click(function() { 
     window.parent.dolink($(this).attr('href')); 
     return false; 
     }); 
}); 
} 
+0

To naprawdę nie musi być w anonimowej funkcji ... –

Powiązane problemy