Spec-Zone.ru › Ruby on Rails 8.1

модуль ActionController::AllowBrowser::ClassMethods

Открытые методы экземпляра

allow_browser (versions:, block: -> { render file: Rails.root.join("public/406-unsupported-browser.html"), layout: false, status: :not_acceptable } Показать исходный код
# File actionpack/lib/action_controller/metal/allow_browser.rb, line 57
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 Not Acceptable».

Помимо версий конкретных браузеров, в качестве набора можно также передать :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
  # Allow only browsers natively supporting webp images, web push, badges, import maps, CSS nesting, and CSS :has
  allow_browser versions: :modern, block: :handle_outdated_browser

  private
    def handle_outdated_browser
      render file: Rails.root.join("public/custom-error.html"), status: :not_acceptable
    end
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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API