IE9 中的简单调试
- 打开 IE9
- 按 F12 打开开发者窗口
- 单击“脚本”选项卡
- 单击右侧窗格中的“控制台”
- 尝试加载您的页面
您将看到以下错误:
SCRIPT5009: 'matchMedia' is undefined
scripts.js, line 2 character 2
IE9 不支持 'matchMedia' 功能,因此没有定义它。尝试在代码中引用它会在此时完全停止 JavaScript 的执行,因为它不知道如何处理对未定义内容的引用。
到底是怎么回事
jQuery 正在您的页面上加载。您可以通过在控制台输出下方的文本输入行中输入“$”来确认这一点,然后按 Enter。控制台将输出一些关于如何定义 $ 的数据。这是 jQuery 加载的一个非常好的迹象。并非在所有情况下都具有决定性,但对于这一点,我们已经准备好。
发生的事情是您的回调正在运行 onDomReady(通过 $(document).ready(...)),但它在第一行出错。此错误导致回调的其余部分不执行。
验证功能支持
您可以使用caniuse.com查看浏览器支持的功能(JS、CSS 等)。在这种情况下:http://caniuse.com/matchmedia。您会注意到 IE10 是第一个支持 matchMedia 功能的版本。您可以假设在任何早期版本中,默认情况下您都不会拥有 matchMedia,并且引用它会导致错误。
你现在可以做什么
在 caniuse.com 网站上,顶部是一个名为“资源”的水平列表。在这方面,您通常会找到修补不支持特定功能的浏览器的方法。
在 matchMedia 的情况下,有一个指向“polyfill”的链接,它将使用自定义 js 来模拟 matchMedia 的功能。网址是:https ://github.com/paulirish/matchMedia.js/ 。
Polyfills 有时在使用时有限制或陷阱,所以要小心。有趣的是,matchMedia polyfill 是由Paul Irish编写的,他是 Web 技术领域的知名人物。
关于条件 IE 的注意事项包括
IE 支持条件注释,因此您可以只为特定版本的 IE 包含上面定义的 polyfill;在您的情况下,任何 < IE10。这记录在 MDN 上:http: //msdn.microsoft.com/library/ms537512.aspx
<!--[if lte IE 10]]>
<script src="polyfill.js"></script>
<![endif]-->
这样做是为了我们可以在可能的情况下使用浏览器的实现(通常更快并且可能具有更多功能),并且仅在需要时使用 polyfill。