Tại sao mọi người vẫn sử dụng iframe? [đóng cửa]


89

Đối với tôi iframe là thuần ác (tốt, có thể không thuần khiết như vậy). Họ dường như gây ra rất nhiều rắc rối. Có, toàn bộ trang web của bạn sẽ tải một lần và sau đó bạn chỉ có thể tải một trang duy nhất. Nhưng người ta đã phát minh ra AJAX cho mục đích này.

Một trong những vấn đề lớn nhất mà tôi gặp phải iframelà tôi không thể dán liên kết đến một trong các trang con, vì URL không bao giờ thay đổi (vâng, tôi biết có cách giải quyết cho việc này). Điều thứ hai, các công cụ tìm kiếm web có thể gặp vấn đề để lập chỉ mục các trang web đó một cách chính xác.

Đôi khi khả năng truy cập của các trang web này kém hơn và một số trình duyệt thậm chí có thể hiển thị chúng không đúng cách.

Có nhiều cách tốt hơn để thiết kế bố cục mà không có (i) khung. Hàng ngày, tôi có thể thấy một số người đặt câu hỏi tại SO, như "Làm thế nào để truy cập iframe với jQuery?".

Vậy iframe có những lợi ích gì? Lý do gì để vẫn sử dụng chúng? Tôi chỉ muốn biết tại sao :)

(vì nó không phải là một câu hỏi thực sự, nó là một CW)


Tôi đồng ý với Moshe ở trên. Công dụng duy nhất khác của Iframes là dành cho: các ứng dụng web cổ không hỗ trợ CSS hiện đại hoặc trong một số môi trường độc quyền.
Boris Hamanov

những ngày này, thật không may, mọi trình duyệt đều có vấn đề về khả năng tương thích! chúng không chuẩn! thẻ div có vấn đề, thẻ bảng có vấn đề, v.v. ... họ sẽ mất thời gian của chúng tôi để thiết kế một trang web tương thích 100%. đôi khi là cách cuối cùng để làm cho một trang web tương thích ngay cả với IE7. đang sử dụng iframe. iframe có thể vá mọi vấn đề: '(nếu bạn kiểm tra tình trạng trang web của tôi, bạn sẽ thấy một lần rất nhiều từ IE7 rất nhiều người đang sử dụng trình duyệt cũ thậm chí vào năm 2016 !!!.
Mahdi Jazini

Câu trả lời:


102

Tôi có thể nghĩ ra 2 lý do (vào lúc này) tại sao mọi người vẫn sử dụng iframe thay vì AJAX:

1) Iframe phá vỡ chính sách nguồn gốc tên miền chéo (hình ảnh, tập lệnh và kiểu thì không). Điều này có thể hữu ích để lấy các trang web / nội dung từ các tên miền khác một cách tương đối an toàn. Về cơ bản, điều này cho phép lợi thế của việc có thể hiển thị dữ liệu từ các miền khác một cách trực quan mà không để chúng hiển thị trên trang của bạn với quyền truy cập không giới hạn (giống như điều gì đó như JSONP có thể làm).

2) Bạn có thể tải nhiều loại tài nguyên từ bên trong iframe, không chỉ một số loại mime nhất định (bạn tương đối hạn chế đối với application / javascript, application / x-javascript, text / css, text / xml, image / png, image / jpeg, image / gif với script, XHR, hình ảnh và nguồn). Ví dụ: nếu tôi muốn cho bạn xem một tệp PDF, tôi có thể mở một khung nội tuyến và cho phép plugin Adobe Reader hiển thị cho bạn tệp đó. Ngoài ra, trong cùng một miền, nếu tôi muốn tổng hợp một tập lệnh, kiểu và hình ảnh (nội dòng trên trang, hình ảnh sẽ phải là URI dữ liệu), tôi có thể thực hiện điều này bằng iframe (và nếu nó trong cùng một miền, cổng và giao thức Tôi cũng có thể truy cập nó bằng JavaScript).

Bạn có biết rằng Gmail là một tập hợp các iframe? Phần có thể nhìn thấy chỉ là vị trí thông minh. Ngoài ra, nhiều triển khai OAuth (Twitter, Facebook, Google, Yahoo!) thường sử dụng iframe để liên kết người dùng trên miền của họ với URL xác thực thành công (sau khi người dùng đăng nhập).


2
Re # 1, Nhưng tiêu đề HTTP có thể chặn iframe ..... các
Pacerier

2
Re # 2, Nhưng bạn có thể làm điều đó mà không iframe, ví dụ:<embed src="http://www.pdf995.com/samples/pdf.pdf" type="application/pdf">
Pacerier

4
Thứ 3, Gmail có thể được viết lại mà không cần iframe. Vậy tại sao mọi người vẫn sử dụng iframe cho các trình duyệt hiện đại? Câu hỏi vẫn chưa được trả lời.
Pacerier

22

IFRAME được sử dụng để nhúng và tách nội dung của bên thứ ba vào một trang web.

Hầu hết các giải pháp quảng cáo web đều dựa trên iframe - vì chúng cung cấp bảo mật (chính sách tên miền chéo) và hình chữ nhật biệt lập trên màn hình có thể được quản lý hoàn toàn bằng nội dung và tập lệnh của bên thứ ba (trường hợp sử dụng phổ biến là quảng cáo).

Một cách sử dụng hiện đại khác của IFRAMES là quản lý lịch sử (cách giải quyết nút quay lại phổ biến) của các ứng dụng AJAX.

FRAME là phiên bản kém của IFRAMES. Việc sử dụng chúng ngày càng giảm.


1
Điều này đơn giản hơn rất nhiều và là ví dụ điển hình về quảng cáo :)
oneworld

15

Nếu người dùng đã tắt javascript, iframe sẽ hoạt động khi ajax không. Điều này không nằm ngoài câu hỏi, khi mọi người sử dụng những thứ như NoScript .


4
Điều này đúng, nhưng việc thay đổi / thêm / thao tác iframe yêu cầu JavaScript trong hầu hết các trường hợp (ngoại trừ 2 trường hợp mà tôi có thể nghĩ đến, liên kết đến mục tiêu và <form>đăng lên mục tiêu).
Dan Beam

Đúng; ngay cả như vậy, việc thay đổi những gì iframe trỏ đến bằng cách sử dụng JS thường yêu cầu một dòng, trái ngược với sự phức tạp hơn của XMLHttpRequest.
Reinderien

7

Tôi sử dụng chúng trên các trang web ajax, khi tôi cần tải tệp lên mà không cần tải lại trang.


@Mwizak Ajax nên afaik bao gồm tất cả các loại javascript bao gồm cả góc cạnh.
CodeReaper,

3

Tôi vẫn thấy iframe được sử dụng trong các tập đoàn lớn, nơi họ cung cấp một dấu hiệu duy nhất để đưa thông tin tiêu đề về người dùng đã xác thực, sau đó được chuyển qua iframe tới (các) ứng dụng thực tế. Vì "cổng thông tin" xung quanh iframe xử lý tất cả các chi tiết xác thực cụ thể nên các ứng dụng đằng sau nó không cần phải triển khai từng ứng dụng, giúp cho nhóm phát triển dễ dàng hơn và có một nơi duy nhất để theo dõi và điều chỉnh chi tiết xác thực của người dùng.


Đừng hiểu tại sao bạn không thể thêm tiêu đề với XMLHttpRequest ( w3.org/TR/XMLHttpRequest/#the-setrequestheader-method ) trừ khi miền, giao thức và cổng không khớp (có nghĩa là bạn gặp sự cố khác với tiêu đề)?
Dan Beam

Vấn đề là đó là 2 ứng dụng khác nhau, thường là 2 công nghệ hoàn toàn khác nhau. Một cái xử lý xác thực và cái kia lấy các tiêu đề được đưa vào cho phiếu xác thực (hoặc xây dựng nó khi cần).
Kris van der Mast

3

Có rất nhiều lý do kỹ thuật để sử dụng chúng (đặc biệt là vấn đề bảo mật được Dan Beam đề cập).

Những gì bạn không nên làm là sử dụng iframe “như khung”, thực hiện điều hướng đến các trang mới bằng cách chỉ cập nhật iframe. Như bạn nói, điều này ngăn điều hướng không thể đánh dấu / có thể liên kết, phản hồi với các nút điều hướng thông thường và cung cấp khả năng chi trả liên kết hữu ích như tab mở trong mới.

Nhưng điều đó không đặc biệt đối với iframe. Bạn có thể thấy ngày càng nhiều trang mà việc điều hướng được thực hiện bằng cách tìm nạp nội dung mới XMLHttpRequestvà viết nó vào div nội dung chính innerHTML. Thường thì điều này được thực hiện với jQuery load()và các hình ảnh động slide thông minh. Điều này phá vỡ điều hướng cũng tệ như iframe-used-as-frame, hoặc thực sự là các bộ khung cũ. Thật đáng tiếc khi nhiều tác giả web đang sử dụng chiến thuật này tin rằng nó là một phương pháp thiết kế web siêu hiện đại, trong khi thực sự nó chỉ là một làn da mới trên bộ khung bị coi thường ngày hôm qua.

Bạn có thể giải quyết vấn đề này trong cả hai trường hợp, nhưng điều đó có nghĩa là bạn phải lưu trữ một #dạng xem trong phần định danh phân đoạn và hỗ trợ điều hướng băm thích hợp, điều này không hề nhỏ. Ngay cả khi bạn vẫn gặp sự cố với các tác nhân không phải JS như công cụ tìm kiếm; cuối cùng bạn phải có điều hướng dựa trên song song ?#dựa trên cơ sở để hỗ trợ cả hai. Đó là một nỗi đau và hầu hết không bận tâm.


Hãy chờ đợi API Lịch sử trong HTML5, API này sẽ cho phép tìm nạp nội dung mà không cần tải lại hoặc phá vỡ nút quay lại / chuyển tiếp.
Lie Ryan

2

Các khung đã lỗi thời so với HTML 5 và đôi khi bạn cần phải có một khung với một trang khác trong một trang. Ngoài ra AJAX chỉ có thể làm được nhiều như vậy. Hãy thử tải tệp lên một trang web trên miền khác thông qua https mà không có iframe. AJAX sẽ không giúp bạn ở đó.


2

Ngoài những lý do khác, tôi có một cách sử dụng cụ thể iframetrong ứng dụng của mình. Thật không may, trình duyệt mục tiêu trong trường hợp của tôi là Internet Explorer 6. Tôi cần có chân trang và đầu trang được cố định trong các trang web của mình. Phần chính của trang này có thể cuộn được.

Tuy nhiên, có một lỗi trong IE6 , nơi tôi không thể hiển thị một divphần tử trên đầu các selectphần tử bằng thuộc tính z-indexCSS. Vì vậy, tôi cần tạo một tài iframekhoản sẽ được sử dụng làm bản hack để tránh sự cố này.

Tất nhiên, đây là cách sử dụng thực sự cụ thể iframevà duy nhất IE6...



1

Tôi đang xây dựng một mạng xã hội và tôi thấy iframe hữu ích cho các widget để đưa vào trang web của những người khác để hiển thị giống như một hồ sơ nhỏ hoặc tích hợp với nội dung trên một máy chủ từ xa. Có vẻ như đây là cách đơn giản nhất để xây dựng cái này. Tôi biết một số widget sử dụng JavaScript. Ngoài ra với phương thức iframe, phiên giống như truy cập trang web bình thường, rất tuyệt vời cho các nút thích.


0

Nhiều Trình chỉnh sửa Văn bản được Định dạng (ví dụ: TinyMCE, HTMLArea) được triển khai dưới dạng iframe.


Điều này là do FireFox IIRC.
alex

0

iFrames ổn đối với một số trường hợp, như yêu cầu miền X hoặc đăng dữ liệu lên nguồn thông qua các tham số. Nhưng khi tôi muốn truy cập dữ liệu trên các miền, tôi thích sử dụng tệp CSS hơn - chúng có thể chấp nhận tham số, đặt cookie, thêm nội dung vào trang (: before &: after) và đưa ra phản hồi trực quan.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.