我真的很喜欢SyntaxHighter - 它是最漂亮的代码。不幸的是,我对 IE7 和 IE8 中一个令人震惊的 JS 错误大发雷霆,这将阻止我完全使用这个原本出色的插件。
这是一个测试用例。我包括
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
在我的标题中,以便 IE7 和 IE8 可以识别 HTML5 元素。
在我的测试页面的正文中,我刚刚得到了一些导航项:
<nav id="top-nav" class="f16 clearfix">
<ul id="nav-menu">
<li><a href="index.htm">Home</a></li>
<li><a href="branding.htm">Branding</a>
<ul class="nav-submenu">
<li><a href="logos1">Logos 1</a></li>
<li><a href="logos2">Logos 2</a></li>
<li><a href="logos3">Logos 3</a></li>
</ul>
</li>
</ul>
</nav>
除了这些包括 JQuery 和 SyntaxHighlighter 之外,没有别的东西,以及这个初始化 SyntaxHighlighter 并尝试将事件侦听器添加到导航菜单的小脚本。
<script src="extra/syntax-highlighter/shCore.js"></script>
<script src="extra/syntax-highlighter/shBrushJScript.js"></script>
<script src="extra/syntax-highlighter/shBrushXml.js"></script>
<script>
SyntaxHighlighter.all();
$(document).ready(function(){
$('#nav-menu').on('mouseenter', function () {
$(this).children('.nav-submenu').fadeIn('fast');
})
})
</script>
当我在 IE7 和 IE8 中查看此页面时,我收到错误“SCRIPT5007:无法获取属性'slice'的值:对象为空或未定义”并且我的 jQuery 无法工作。
通过阅读,我了解到这可能与 SyntaxHighlighter 使用的 XRegExp 有关。根据this jQuery bug ticket,在XRegExp 1.5.1 中修复了XRegExp 中的一些错误。不幸的是,这个修复似乎没有找到 SyntaxHighlighter 的方法。在 SyntaxHighlighter 的Bitbucket 页面上讨论了类似的错误。我尝试了一个人制作的修改后的 XregExp.js 和 shCore.js 文件,但它并没有解决我的问题。
有没有其他人遇到过这种事情?否则我将不得不使用其他一些糟糕的语法荧光笔!