модуль ActionController::AllowBrowser::ClassMethods
Публичные методы экземпляров
# File actionpack/lib/action_controller/metal/allow_browser.rb, line 47
def allow_browser(versions:, block: -> { render file: Rails.root.join("public/406-unsupported-browser.html"), layout: false, status: :not_acceptable }, **options)
before_action -> { allow_browser(versions: versions, block: block) }, **options
end Укажите версии браузеров, которым будет разрешен доступ ко всем действиям (или к некоторым, в зависимости от ограничений, заданных в only: или except:). Браузеры, не соответствующие значениям в переданном хэше или набору, переданному в versions:, будут заблокированы, если их версии ниже указанных. Это означает, что всем другим браузерам, а также агентам, которые не передают заголовок user-agent, будет разрешен доступ.
Заблокированный браузер по умолчанию будет перенаправлен на файл в public/406-unsupported-browser.html с HTTP-статусом «406 Неподходящий формат».
Помимо указания конкретных версий браузеров, вы также можете передать :modern в качестве набора, чтобы ограничить поддержку браузерами, которые поддерживают изображения webp, веб-push-уведомления, значки, импорт карт, вложенные CSS и CSS :has. Это включает Safari 17.2+, Chrome 120+, Firefox 121+, Opera 106+.
Для проверки версий браузеров, поддерживающих используемые вами функции, можно использовать caniuse.com.
Вы можете использовать ActiveSupport::Notifications для подписки на события блокировки браузеров, используя имя события browser_block.action_controller.
Примеры:
class ApplicationController < ActionController::Base
# Allow only browsers natively supporting webp images, web push, badges, import maps, CSS nesting, and CSS :has
allow_browser versions: :modern
end
class ApplicationController < ActionController::Base
# All versions of Chrome and Opera will be allowed, but no versions of "internet explorer" (ie). Safari needs to be 16.4+ and Firefox 121+.
allow_browser versions: { safari: 16.4, firefox: 121, ie: false }
end
class MessagesController < ApplicationController
# In addition to the browsers blocked by ApplicationController, also block Opera below 104 and Chrome below 119 for the show action.
allow_browser versions: { opera: 104, chrome: 119 }, only: :show
end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.