Vous pouvez détecter, mais ce n'est pas joli.
Tout d'abord, vous avez besoin d'un nouveau contrôleur avec une action qui met à jour un délai d'attente de la session:
class JavascriptController < ApplicationController
def confirm
session[:javascript_updated] = Time.now
end
end
Ensuite, vous devez inclure une action javascript dans toutes vos pages, cette action du contrôleur est appelé sur chaque page charge. Le plus simple est de l'inclure dans un fichier "javascript-confirm.js" inclus dans votre mise en page (sur cet exemple particulier j'ai utilisé Ajax.Request de Prototype, donc vous devez l'avoir aussi sur vos javascripts):
function confirmJavascript()
{
// Assuming you are using Prototype
new Ajax.Request('/JavascriptController/confirm');
}
myTimeoutFunction();
setInterval(myTimeoutFunction, 10000); // invoke each 10 seconds
Ceci appellera l'action de confirmation dans toutes vos pages vues. Enfin, vous devez contrôler le temps écoulé depuis votre dernière confirmation dans votre contrôleur d'application.
class ApplicationController < ActionController::Base
JAVASCRIPT_TIME_LIMIT = 10.seconds
before_filter :prepare_javascript_test
private
def prepare_javascript_test
if (session[:javascript_updated].blank? or
Time.now - session[:javascript_updated] > ApplicationController::JAVASCRIPT_TIME_LIMIT)
@javascript_active = true
else
@javascript_active = false
end
end
end
Vous aurez maintenant une variable appelée @javascript_active
dans tous vos contrôleurs.
Il devrait fonctionner même si l'utilisateur active/désactive le javascript, avec une précision de 10 secondes.Cela peut ne pas fonctionner si certaines de vos pages mettent plus de 10 pages à charger (c'est-à-dire avec beaucoup d'images). Augmentez la limite de temps dans ce cas (sur applicationcontroller et votre javascript)
Clause de non-responsabilité: Je n'ai pas testé ce code, certains bugs pourraient être cachés - mais cela devrait vous orienter dans la bonne direction.
Voulez-vous dire si votre serveur peut exécuter des Javascripts? Sinon, vous ne pouvez tout simplement pas. – shinkou
Vous ne pouvez pas côté serveur, mais voici une solution Rails simple: [détection javascript Ruby on Rails] (http://stackoverflow.com/questions/745613/ruby-on-rails-javascript-detection) – Yarin