2009-04-20 27 views
14

Giả sử tôi có một số tab (tab ví dụ jquery) và tôi muốn tự động tải một số trang trong mỗi tab, tôi có thể làm điều đó trong hai cáchiframe vs ajax

  1. tab Sử dụng jquery ajax (về cơ bản điền div với dữ liệu ajax) hoặc
  2. Mỗi tab có thể chứa khung nội tuyến và trang được tải vào đó.

Q1. Tôi thấy không có sự khác biệt giữa hai cách tiếp cận với người dùng, phải không?

Q2. Tôi nghĩ rằng iframe cách là tốt hơn bởi vì iframe có thể tải bất kỳ trang nào nhưng đôi khi tải dữ liệu ajax vào div có thể không hoạt động như mong đợi.

+1

Câu hỏi hay .. –

Trả lời

6

Đối với một, có lỗi trong trang được bao gồm (hoặc cuộc gọi ajax) có lẽ tốt hơn để xử lý với phương pháp tiếp cận ajax. Với iframe, bạn sẽ chỉ nhận được lỗi 404 hoặc 500 xấu xí ở giữa trang của mình. Nhưng với ajax bạn có thể phát hiện lỗi và hiển thị một thông báo lỗi thân thiện với người dùng hơn.

Nó cũng phụ thuộc vào dữ liệu bạn đang tải vào trang của mình. Nếu bạn kiểm soát tải html, bạn có thể tránh hoặc sửa bất kỳ sự cố hiển thị nào có thể phát sinh. Nếu bạn cần tải một trang nằm ngoài tầm kiểm soát của mình, iframe sẽ là tốt nhất (hoặc cần thiết).

Cũng có thể có khả năng tiếp cận các vấn đề liên quan đến một trong hai cách tiếp cận, nhưng tôi không đủ với những gì quen thuộc để xác định phương pháp hoạt động tốt nhất với trình đọc màn hình, vv

1

Nếu các trang là nội dung của bạn, và bạn có thể kiểm soát các bảng định kiểu và mọi thứ được truy cập bởi từng cái ... sau đó đi với tùy chọn số một. Bạn có thể thiết kế mọi thứ để bạn không phải truy xuất nội dung được chia sẻ nhiều lần.

Nếu các trang nằm ngoài tầm kiểm soát của bạn (các trang web bên ngoài, v.v.), sau đó tải chúng lên trong iFrames. Bạn sẽ không phải lo lắng về việc các trang hiển thị chính xác, v.v.

0

Với iframe, bạn có thể gặp sự cố thanh cuộn nếu nội dung được tải từ trang web bên ngoài và chiều rộng và chiều cao không được biết trước. Với thao tác ajax và DOM, bạn sẽ không gặp phải vấn đề này.

Đây là lý do duy nhất tại sao tôi bán iFrames trong một trường hợp cụ thể. Các giải pháp rất hacky để báo cáo chiều rộng và chiều cao từ một trang web từ xa được tải trong một khung nội tuyến, chỉ đơn giản là không có giá trị rắc rối.

+0

Nếu smoeone biết chiều cao và chiều rộng iframe –

0

Bằng cách trộn cả iframe và ajax, nếu trang tải của bạn (khung nội tuyến cố tải) không phản hồi ngay lập tức sao cho khối trắng trống được tạo, khung nội tuyến có thể ngăn các yêu cầu ajax khác trong hầu hết trình duyệt do hiển thị. Mặt khác, khung nội tuyến mạnh mẽ hơn, bạn có thể có khung xếp chồng đặc biệt với nền trong suốt và không lo về chiều rộng hoặc chiều cao của khung và khung này sẽ xuất hiện chính xác giống như trang không có khung.

0

Hãy lưu ý đến nội dung nguồn của bạn ở đâu. Nếu nó nằm trong miền của bạn, bạn có thể sử dụng iframe hoặc cuộc gọi ajax. Nhưng nếu nó nằm trong một miền khác, bạn không thể sử dụng ajax do bảo vệ "cross-site-scripting" của nó.

Tôi nghĩ đó là khía cạnh chính về lựa chọn giữa iframe và cuộc gọi ajax.

+0

Có một cách để giải quyết vấn đề này bằng cách sử dụng Access-Control-Allow-Origin chẳng hạn trong Java có thể đặt: 'response.addHeader (" Access-Control-Allow-Origin ") , "*"); '. – Ithar

+1

@ Ithar: Đúng vậy. Nhưng sau đó bạn giả sử bạn có quyền kiểm soát mã phía máy chủ cung cấp nội dung cho Tab của bạn. –