方法
实例公共方法
allow_browser(versions:, block: -> { render file: Rails.root.join("public/406-unsupported-browser.html"), layout: false, status: :not_acceptable } 链接
指定允许访问所有操作(或由only:
或 except:
限制的一些操作)的浏览器版本。仅在传递给versions:
的哈希或命名集中匹配的浏览器将在其版本低于指定版本时被阻止。这意味着所有其他浏览器以及未报告用户代理标头的代理都将被允许访问。
默认情况下,被阻止的浏览器将收到位于 public/406-unsupported-browser.html 的文件,以及一个“406 Not Acceptable”的 HTTP 状态代码。
除了特定命名的浏览器版本之外,您还可以传递:modern
作为集合来限制对原生支持 webp 图像、Web 推送、徽章、导入映射、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
来源:显示 | 在 GitHub 上
# 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