2009-04-13 44 views
9

Tôi đang tạo một ứng dụng web sử dụng các hàm trợ giúp tích hợp sẵn của Rails để thêm chức năng ajax vào trang web. Tôi không muốn người dùng có thể sử dụng ứng dụng mà không có JS vì nó sẽ không hoạt động đúng.Ruby on Rails, phát hiện Javascript

Tôi cần để có thể ngăn chặn điều này. Làm cách nào để ngăn người dùng tải bất kỳ trang nào của tôi mà không có JS?

Tôi đã cố gắng sử dụng thẻ trong bố cục của mình. Điều này phát hiện sự vắng mặt của JS nhưng vẫn hiển thị các khung nhìn. Việc đặt thẻ tập lệnh xung quanh sản lượng sẽ ngăn không cho bất kỳ chế độ xem nào được hiển thị.

Bất kỳ ý tưởng nào về cách thực hiện việc này?

Trả lời

21

Bạn có thể có khối noscript trong phần tử head với thẻ làm mới meta trong đó. Ví dụ:

<head> 
    <!-- title, scripts, css etc go here --> 
    <noscript> 
     <meta http-equiv="refresh" content="2;url=http://yoursite.com/nojswarning.html"> 
    </noscript> 
</head> 

bạn có thể đọc thêm về meta refresh here

Hope this helps

EDIT: Để làm rõ, thẻ noscript chỉ chạy nếu JavaScript bị tắt cho người dùng. Vì vậy, trong trường hợp này nếu JS bị tắt, người dùng sẽ được chuyển hướng đến http://yoursite.com/nojswarning.html. tất nhiên bạn có thể thay đổi điều này thành bất kỳ trang nào trên bất kỳ trang web nào bạn muốn.

+0

cảm ơn bạn, bài đăng tuyệt vời, đã hoạt động hoàn hảo. –

2

Câu trả lời đơn giản là tải toàn bộ ứng dụng qua JS. Bằng cách đó, ứng dụng sẽ không bao giờ hiển thị cho người đã bật JS.

Cách khác là bắt đầu trang của bạn bằng iframe, trang này sẽ tải lên trang kiểm tra JS. Tất cả các trang không chuyển hướng người dùng đến URL thực của ứng dụng thông qua JS. Do đó, nếu người dùng không có JS, họ sẽ không được chuyển hướng (và bạn có thể thông báo cho họ rằng họ cần JS với các thẻ < noscript>). (Tôi nói để sử dụng khung nội tuyến để bạn không cung cấp cho người dùng không phải JS một URL dễ dàng để truy cập vào ứng dụng.)

0

<noscript></noscript> có vẻ như hoạt động. Tôi sẽ làm cho mặc định một bộ tải nhỏ với một lớp phủ, và nếu khách hàng không hỗ trợ javascript, javascript sẽ không bao giờ ẩn bộ nạp. Và nội dung trong thẻ <noscript> sẽ hiển thị cùng với lớp phủ.