javascript - 我不想使用前缀,而是希望网站访问者升级他们的浏览器

标签 javascript jquery css flexbox

我正在使用 CSS 重建网站 flexbox .

检查中browser compatibility ,我看到所有现代浏览器都支持 flexbox,除了 Safari 8 和 IE 10 需要 vendor 前缀。

在查看 Google Analytics 时,我发现过去 6 个月中 96% 的网站访问者使用完全支持 flexbox 的浏览器。其余 4% 使用需要前缀或不提供支持的浏览器。

因为我们谈论的是 4% 的用户,而且这个数字会越来越小,(而且我希望我的代码尽可能保持干净和简单),我正在考虑不使用前缀,而是询问用户升级他们的浏览器。

How can I target older browsers in order to display a message to users asking them to update their browser?

这是我目前所拥有的:

<!--[if IE]>
    <div class="browserupgrade">
        <p>You are using an outdated browser. Please <a href="http://browsehappy.com/">
           upgrade your browser</a> to improve your experience.</p>
    </div>
<![endif]-->

这个 IE 条件注释涵盖了 IE 版本 6、7、8 和 9。

这些访问者将收到带有下载当前浏览器链接的提醒。然而,Microsoft discontinued support for conditional comments starting with IE10 .

现在我需要类似的东西:

  • IE 10
  • Safari 7-8
  • Opera Mini < 8
  • 安卓 UC 浏览器
  • Android 浏览器 < 4.4

是否有一个简单的 JS/jQuery 脚本来处理这项工作?还是另一种轻量级的方法?


解决方案

谢谢大家的回答。显然有很多方法可以解决这个问题(Modernizr、PHP、jQuery 函数、纯 Javascript、CSS、browser-update.org 等)。其中许多方法可以完全有效地完成这项工作。

我选择了最简单的一个:CSS(信用 @LGSon)。

此 CSS 基本上涵盖所有目标浏览器,IE <= 7 除外。

.browserupgrade { display: block; }
_:-ms-fullscreen, :root .browserupgrade { display: none; }
:-o-prefocus, .browserupgrade { display: none; }
@supports (display: flex) { .browserupgrade { display: none; }}

有关详细信息,请参阅答案。

对于那些使用 IE <= 7 的相对较少的访问者,HTML 中的条件注释:

<!--[if lte IE 7]>
    <div style=" ... inline styles here ...">
        browser upgrade message here
    </div>
<![endif]-->

最佳答案

问题编辑后修改的答案

这是实现该目标的唯一 CSS 方法。

作为CSS @supports不适用于您的目标(不需要的)浏览器:Safari 7-8、IE <= 10、Android 浏览器 < 4.4、适用于 Android 的 UC 浏览器和 Opera Mini < 8,您的“browserupgrade”消息将在使用此规则的浏览器上可见.

@supports (display: flex) { .browserupgrade { display: none; }}

有一些浏览器仍然支持无前缀的 flex 但不支持 @supports,IE 11(1) 和 Opera Mini 8,但幸运的是我们可以使用一些 CSS 特定规则来解决它们。

/* IE 11 */
_:-ms-fullscreen, :root .browserupgrade { display: none; }

/* Opera Mini 8 */
:-o-prefocus, .browserupgrade { display: none; }

这是为您的目标浏览器显示升级消息的完整代码。

CSS

.browserupgrade { display: block; }

/* IE 11 */
_:-ms-fullscreen, :root .browserupgrade { display: none; }

/* Opera Mini 8 */
:-o-prefocus, .browserupgrade { display: none; }

/* all modern browsers */
@supports (display: flex) { .browserupgrade { display: none; }}

HTML

<div class="browserupgrade">
    <p>You are using an outdated browser. Please <a href="http://browsehappy.com/">
       upgrade your browser</a> to improve your experience.</p>
</div>

(1):IE 11 CSS 规则应该也适用于 IE Mobile 11,但还没有人对其进行测试。


CSS @supports 也可以作为 API 使用,CSS.supports() .这是一个写得很好的article by David Walsh .


此外,如果想要自动重定向这些浏览器,这里有一个小脚本可以在延迟 10 秒后执行此操作。

var el = document.querySelector('.browserupgrade');
if (window.getComputedStyle(el,null).getPropertyValue("display") != 'none') {
  setTimeout(function(){
    window.location = 'http://browsehappy.com/';        
  }, 10000);
}

关于javascript - 我不想使用前缀,而是希望网站访问者升级他们的浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33359157/

相关文章:

javascript - jQuery Mobile 下拉菜单导致页面重新加载

附加 html 中的 javascript 点击事件订阅

javascript - 使用 URL 的 jQuery 选项卡激活器

css - 使用 CSS 垂直对齐图像旁边的链接

CSS 分页符不起作用

php - SilverStripe 主题无法识别主页主题

javascript - 菜单项(html)将javascript加载到div中

javascript - else 期间需要点击事件来触发警报

javascript - html5 Canvas 上的发光效果?

javascript - 如何在 Famo.us 中的表面之间滑动?