Я пытаюсь улучшить свой код в Blogger. Я связал файлы Google JS и CSS со своим шаблоном. Проблема в том, что я хочу, чтобы код был предварительно обработан при загрузке страницы, поэтому я добавляю prettyPrint();
к событию загрузки страницы в шаблоне.
<body onload="prettyPrint();">
Этот код не выполняется. Однако, если я наберу в консоли prettyPrint() вручную, мои коды будут корректно обработаны. Блокирует ли шаблон blogger вызов функций JS вручную?
РЕДАКТИРОВАТЬ Я заставляю это работать, вручную вызывая функцию в каждом сообщении, код которого мне нужно украсить (см. ниже). Тем не менее, я хочу знать, почему я не могу сделать это на шаблоне.
<pre class="prettyprint linenums lang-js">
function testCode(){
}
</pre>
// I have to do this in every post :-s
<script type="text/javascript">
prettyPrint();
</script>
EDIT 2 В README сказано, что мне не следует использовать prettyPrint()
непосредственно как обработчик, но вместо этого оберните его замыканием. Поэтому я добавил этот код, похожий на пример в README, в свой <head>
, но безрезультатно.
<script type='text/javascript'>
window.addEventListener('load', function (event) { prettyPrint() }, false);
</script>
ИЛИ
<script type='text/javascript'>
document.addEventListener('DOMContentLoaded',function() {
prettyPrint();
});
</script>
РЕДАКТИРОВАНИЕ 3 HTML-код моего шаблона — это просто шаблон Dynamics View (классический) по умолчанию с библиотекой prettify, добавленной, как описано выше.
EDIT 4 Вот ссылка, демонстрирующая проблему: http://testprettyprint.blogspot.com/2013/02/blog-post.html -- блок кода не претифицируется автоматически, но если вы откроете консоль Chrome и наберете prettyPrint(), коды будут правильно выделены.
EDIT 5 Причина, по которой я думаю, что это моя проблема, а не проблема блоггера, потому что этот парень все еще имеет свой код, предварительно обработанный с использованием той же техники: http://errorbuster.blogspot.com/2012/07/prettify-syntax-highlighter-for-blogger.html
EDIT 6 Как указал Джеффри То в своем ответе, представление Dynamics View загружает содержимое блога с помощью AJAX, поэтому любой вызов JS при загрузке документа будет выполняться ДО загрузки фактического содержимого. Таким образом, любой код JavaScript, выполненный с фактическим содержимым блога, а не с документом, недействителен. Итак, я предполагаю, что теперь вопрос заключается в том, как подключиться к событию Dynamics View ajax:complete
, если такое существует, но я сомневаюсь, что это так. Спасибо всем, кто ответил. Я не уверен, что это можно считать ошибкой, но я сообщу о проблеме блоггеру.
ЗАКЛЮЧЕНИЕ Пожалуйста, прочитайте ответ Джеффри То. Он нашел событие для вызова функции.
prettyPrint()
наalert('onload happened')
, появится ли всплывающее предупреждение, когда вы ожидаете? - person Mike Samuel   schedule 27.01.2013curl
свою страницу и показать фактический HTML-код, поступающий по сети, это могло бы помочь. Однако я заметил одну вещь: скриптdocument.addEventListener('DOMContentLoaded',...)
выглядит как XHTML? Если Blogger использует XHTML для внутреннего хранения, но отправляет HTML, то он искажает кавычки. Возможно, если есть некоторая путаница XHTML/HTML, может помочь добавление раздела/*<[!CDATA[*/...//]]>
вокруг тела скрипта. - person Mike Samuel   schedule 28.01.2013