【再见了~IE!】推荐一个屏蔽IE6-9的弹窗控件IE-Blocker
发布于 21 小时前 作者 panteng 288 次浏览 最后一次编辑是 10 小时前 来自 分享

IE-Blocker帮助你通知用户他们的浏览器已经过时,并阻止用户继续访问网站。

Screenshot

适用场景

如果你的网站不支持IE6-9,那么使用旧版IE的用户访问你的网站时会看到一个布局错乱、功能失效的网站。IE-Blocker正式为了避免这种尴尬而生。

使用IE-Blocker的网站不允许旧版IE用户访问网站内容,取而代之的是,用户会看到一个友好又精美的提示框,告知他们为何无法继续访问网站,并引导他们下载使用最新的浏览器。

项目地址

https://github.com/panteng/ie-blocker

欢迎提BUG和建议,谢谢。

10 回复

untitled1.png这写法,也是醉了

@TimothyJin

之前的版本是把这段HTML独立出来的,需要程序员自己将你截图的那段HTML代码添加到项目的HTML文件里,但是这样很不方便。我需要的是这样的工具——只需要我在项目中添加几行简短的代码,就可以自动帮我实现一个只在IE中出现的提示弹窗。我不希望项目的代码中有太多关于处理那些老掉牙的IE浏览器的东西。

所以最终决定把HTML整合到JS中了。基于这个需求,如果你觉得不妥,请你推荐一个不醉的写法呗,谢谢。

其实我觉得一开始把html独立出来是对的,只是,我认为,你既然有package.json 你是不是可以考虑把html转换为字符导入进来,这样别人用你的库,可以引用个min包之类就行。。。。比如require(’…html’),妥?

很好啊,一直想自己撸一个呢,支持

@TimothyJin 你的方法我大致理解,用require(’./template.html’)的方式把html引入到JS文件中,然后使用browserify或者webpack之类的打包工具打包成一个文件。但是这个方法与我现在的写法其实思路是一样的,最终仍然是把HTML以字符串的形式整合进JS中了。

@panteng 在者,我觉得,如果你要给你的组件加ID,是不是可以使用UUID之类的东西,减少ID重名的概率,而不是写死一个ib-container名称, 你确保用户没有使用ib-container这个作为自己的ID过?

接上,如果要做i18n, 是不是可以做个i18n的配置文件,利用配置模板替换名词,而不是写两个i18n的js文件?以上只是建议,仅供参考

untitled1.png 你确定fixed可以兼容IE6?

@TimothyJin

关于你前面提的三个问题,我分别解释一下。

1.ID的问题。IE-Blocker的确没有办法确保用户不使用#ib-container这个ID。更糟糕的是,IE-Blocker还使用了一些class类名,比如.ib-modal,.ib-header…,IE-Blocker也没办法确保用户不使用这些类名。作为一个需要CSS样式的第三方控件,只能尽可能减少这种情况的发生,而不能彻底避免。我特地在每个类名和ID前加上了‘ib-'前缀,以减少出现类名或ID冲突的可能(或者再变态一点,增加一个可以自定义前缀的配置项)。话说jQuery还会在全局变量中占用jQuery和$这两个变量呢,而它也不能确保用户不使用jQuery和$这两个变量,所以它才会增加一个jQuery.noConflict()方法避免冲突。

2.IE-Blocker分为中文版和英文版主要是为了方便我自己。因为我平时除了写中文网站,还会写一些英文网站,分成两个文件用起来更方便,需要哪个就直接引用哪个。至于说把这个东西独立成一个配置文件,目前看来没有必要。理由跟你前面提到的把HTML独立出来的原因是一样的。我不希望每次使用IE-Blocker前还要手动配置一下,然后再用Webpack之类的工具构建一下,太麻烦了。不该在处理旧版浏览器的问题上花费太多精力,更多的精力应该放在项目的核心内容上。当然如果以后真的有多语言化的需求,搞成一个配置文件也是可以考虑的。

3.position: fixed;在IE 6中的确有BUG。但这没关系啊。IE-Blocker中用了很多CSS Hack代码都是只在某些版本的IE中起作用的,比如这种:

_position: absolute;
_top: expression(eval(document.documentElement.scrollTop) + 'px');
_left: expression(eval(document.documentElement.scrollLeft) + 'px');
_right: auto;
_bottom: auto;
_width: expression(eval(document.documentElement.clientWidth) + 'px');
_height: expression(eval(document.documentElement.clientHeight) + 'px');

IE-Blocker在与这些古怪的IE浏览器打交道的时候,它的核心思想是保证弹窗的样式在各个版本的IE中都能正常显示,而不是纠结于代码是否完美。这也是我作为一个用户的最终需求。我在IE 6中测试IE-Blocker时没有发现明显的样式错误。当然如果有其他未发现的bug,还是要修改的。

最后,还是感谢建议。

回到顶部