2017-07-12 16 views
7

Tôi có một trang https://dev.leadformly.com/datepicker có khung nội tuyến Trong trường hợp cụ thể '', tôi đang viết mã HTML theo cách động bằng cách gọi ajax theo mã sau.Lỗi trình chọn ngày Javascript trong khung nội tuyến

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

Bây giờ khi tôi bấm vào chọn ngày nó sẽ ném ra một lỗi trong giao diện điều khiển như:

Uncaught TypeError: Cannot read property 'top' of undefined 

bạn có thể giúp tôi giải quyết vấn đề này? Hoặc chỉ giải thích nguyên nhân để nó giúp tôi giải quyết nó

+0

nào datepicker bạn đang sử dụng? – 31piy

+0

Mặc định jquery datepicker - https://jqueryui.com/datepicker/ – dang

+1

Lỗi này dường như gặp phải trong 'DateRangePicker', mà không phải là một datepicker jQuery. Bạn có thể kiểm tra lại không? – 31piy

Trả lời

12

Bạn nhận được lỗi này vì bạn đang cố gắng truy cập vào số DOM nội bộ của số iFrame từ số DOM mẹ chứa nó. Sự kiện "click" từ phụ huynh DOM không thể thực hiện cuộc gọi đến các phần tử bên trong một đứa trẻ iFrame.

Tôi có thể hỏi tại sao bạn đang cố gắng sử dụng một số iFrame trong trường hợp này? Tôi gần như có thể đảm bảo với bạn bạn tốt hơn không sử dụng nó.

3

Tôi nghĩ jQuery không thể đọc phần tử khung nội tuyến đó là lý do tại sao nó hiển thị Không thể đọc thuộc tính hàng đầu của lỗi không xác định.

Sử dụng id="ifreame" trong phần tử iframe thì nó sẽ hoạt động.

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

jQuery

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

Tùy chọn cuối cùng bạn có là thử sử dụng tài sản sandbox.

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

Nếu điều này không hoạt động, hãy di chuyển ra khỏi iframe. yếu tố khung nội tuyến được tạo ra để trở thành môi trường hộp cát và dễ bị rủi ro bảo mật rất cao khi bạn mở tập lệnh cho phép. Trang web kết quả/trang web bên ngoài được đặt trong khung nội tuyến có thể làm bất cứ điều gì ... theo nghĩa đen bất cứ điều gì từ việc truy cập vào thông tin đăng nhập, cookie, quyền truy cập, v.v. nếu bạn xóa hộp cát.

Không nên sử dụng iframe nếu bạn muốn truy cập DOM trong nội dung của nó. Nếu đầy đủ hoặc một phần tách biệt là mối quan tâm duy nhất của bạn hãy thử sử dụng phương pháp cô lập thành phần web để:

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

Các vấn đề liên quan