2017-07-12 51 views
7

Mam stronę https://dev.leadformly.com/datepicker o iframe W tym konkretnym '', piszę kod HTML dynamicznie przez wywołanie ajax przez poniższy kod.Błąd wyboru przeglądarki daty w iframe

<script> 
    $(document).ready(function(){ 
    $.post(URL, 
     function (data) { //here it retruns the HTML code 
      $("body").html('<iframe style="width:100%;height:384px;"></iframe>'); 
      $("body iframe")[0].contentDocument.write(data.democode); 
     }, 
     'json' 
    ); 
    }); 
</script> 

Teraz gdy klikam wyboru daty będzie rzucać błąd w konsoli jak:

Uncaught TypeError: Cannot read property 'top' of undefined 

Pomożesz mi rozwiązać ten problem? Lub po prostu wyjaśnij przyczynę, więc pomoże mi to rozwiązać.

+0

Która datepicker używasz? – 31piy

+0

Domyślny datepicker jquery - https://jqueryui.com/datepicker/ – dang

+1

Błąd pojawia się w 'DateRangePicker', który nie jest datepicker jQuery. Czy możesz dokładnie sprawdzić? – 31piy

Odpowiedz

12

Otrzymujesz ten błąd, ponieważ próbujesz uzyskać dostęp do wewnętrznego DOM z iFrame od rodzica iFrame zawierającego go. Zdarzenie "kliknięcie" od rodzica DOM nie może wykonywać wywołań do elementów wewnątrz dziecka iFrame.

Czy mogę zapytać, dlaczego w tej sytuacji próbujesz użyć numeru iFrame? Mogę prawie zapewnić, że lepiej nie używać tego.

3

myślę jQuery nie jest w stanie odczytać element iframe, który jest dlaczego to pokazano nie można odczytać właściwość szczyt nieokreślonej błędu.

Użyj elementu id="ifreame" w elemencie iframe, a następnie powinno działać.

<iframe id="ifreame" style="width:100%;height:384px;"></iframe> 

jQuery

$("body #iframe")[0].contentDocument.write(data.democode); 
3

Ostatnią opcją jest musisz spróbować za pomocą właściwości piaskownicy.

allow-scripts: Allows the embedded browsing context to run scripts (but not create pop-up windows). If this keyword is not used, this operation is not allowed.

https://developer.mozilla.org/en/docs/Web/HTML/Element/iframe

Jeśli to nie zadziała, należy odejść od iframe. Element iframe jest tworzony jako środowisko sandboxed i jest podatny na bardzo wysokie zagrożenia bezpieczeństwa po otwarciu skryptów zezwalających. Wynikowa strona internetowa/witryna zewnętrzna umieszczona w elemencie iframe może zrobić cokolwiek ... dosłownie wszystko, od uzyskania dostępu do poświadczeń, plików cookie, dostępu itp. Po usunięciu piaskownicy.

Iframe nie jest zalecane, jeśli chcesz uzyskać dostęp do DOM w jego treści. W przypadku całkowitego lub częściowego izolacja jest jedynym problemem spróbuj stosując metodę izolacji Składnik sieci Web do:

https://developer.mozilla.org/en-US/docs/Web/Web_Components