Устраняем баг в плагине syntaxhighlighter

Захотелось мне на wordpresse сменить плагин галереи. Поскольку раньше на другие сайты я ставил галерею lightbox, то и в данной ситуации начал искать плагины для wordpressa на его основе. После просмотра нескольких разновидностей галерей, выбор был остановлен на плагине lightbox plus colorbox. Далее плагин был скачан, успешно проинсталлирован и настроен. Но в один прекрасный момент, по воле случая во всем знакомом браузере Internet Explorer, галерея отказалась работать. Вернее как оказалось позже, она и не работала сразу после инсталляции. Просто у меня и в мыслях не было, что в Internet Explorere могут быть проблемы. Так как в других браузерах я протестировал, а ранее в Internet Explorere с галереями lightbox проблем не было.

Сначала подозрение падало на сам плагин. И было принято решение о его замене, на более старую версию. Но после замены, результат оказался тот же. В поисках возможных проблем, я захожу на первый попавшийся сайт с описанием настроек и демонстрацией работы lightbox plus colorbox и вижу, что на том сайте с галереей проблем нет. Т.е. дело не в плагине? Тогда в чем же?

Для выяснения проблемы я начинаю из страницы поочередно удалять подключенные внешние скрипты. И вот в результате эксперимента выясняется, что корректной работе плагина lightbox-plus мешает плагин syntaxhighlighter. И тут я вспомнил, что пару дней назад, до обнаружившейся проблемы, я проводил его обновление. Далее была предпринята попытка, отката на предыдущую версию. Но результат опять не изменился.

Меня уже начали посещать нехорошие мысли, что от одного из плагинов надо бы избавиться, но такая перспектива меня, конечно, не очень устраивала, и было принято решение идти до конца.

После проведения еще некоторых дополнительных тестов было обнаружено, что баг кроется в скрипте shCore.js. А этот скрипт как раз и является ядром плагина syntaxhighlighter. Попытки поиска опять ни чего не дали, хотя про некие баги люди все же писали и про способы их устранения тоже.

Затем я открываю скрипт shCore.js и вижу запакованный код. Ну что же проблем в этом нет, делаем распаковку и тут IE начинает ругаться на символ под номером 3855. А там находится инструкция:

n.replace.call(f.slice(e.index) …

Ну, все теперь понятно, кто не дает галерее спокойно “жить”. Далее необходимо убрать код с символа 3855 по символ 3980, т. е.:

n.replace.call(...)

Теперь запаковываем код обратно и проверяем. В итоге получен долгожданный результат.