syntaxhighlighter_3.0.83: theme_tests.html (DOCTYPE не допускается в контенте) - PullRequest
0 голосов
/ 18 июня 2011

Я получаю сообщение об ошибке на странице theme_tests.html , снабженной syntaxhighlighter_3.0.83 , которую я не получал ранее. Ошибка: Недопустимый DOCTYPE в содержимом в <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> внутри первого тега скрипта <script id="sample" type="text/plain"> тег.

Вот эта страница theme_tests.html :

<code><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>SyntaxHighlighter Theme Tests</title>
    <script type="text/javascript" src="/js/jquery-1.4.2.js"></script>
</head>

<body>

<div id="output"></div>

<style>
body {
    background: white;
    font-family: Helvetica;
}

.test-wrap {
    width: 100%;
    height: 800px;
    overflow: auto;
    border: none;
}
</style>

<script id="sample" type="text/plain">
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>SyntaxHighlighter Theme Tests</title>
    </head>

    <body>
        &lt;script>
        /**
         * Looks for a child or parent node which has specified classname.
         * Equivalent to jQuery's $(container).find(".className")
         * @param {Element} target Target element.
         * @param {String} search Class name or node name to look for.
         * @param {Boolean} reverse If set to true, will go up the node tree instead of down.
         * @return {Element} Returns found child or parent element on null.
         */
        function findElement(target, search, reverse /* optional */)
        {
            if (target == null)
                return null;

            var nodes           = reverse != true ? target.childNodes : [ target.parentNode ],
                propertyToFind  = { '#' : 'id', '.' : 'className' }[search.substr(0, 1)] || 'nodeName',
                expectedValue,
                found
                ;

            // main return of the found node
            if ((target[propertyToFind] || '').indexOf(expectedValue) != -1)
                return target;

            return found;
        };
        &lt;/script>

    </body>
    </html>
</script>

<script type="text/javascript">
var themes = [
        ['#fff', 'Default'],
        ['#000', 'Django'],
        ['#fff', 'Eclipse'],
        ['#000', 'Emacs'],
        ['#000', 'FadeToGrey'],
        ['#000', 'MDUltra'],
        ['#000', 'Midnight'],
        ['#000', 'RDark']
    ];

$(document).ready(function()
{
    var sample = $('#sample').text().replace(/</g, '&lt;');

    $.each(themes, function(index)
    {
        var $iframe = $('<iframe class="test-wrap" src="about:blank" />'),
            background = this[0],
            themeName = this[1]
            ;

        $('#output')
            .append(''
                + '<h1>'
                    + '<a href="#theme' + (index + 1) + '">next</a> '
                    + '<a name="theme' + index + '">'
                        + themeName
                    + '</a>'
                + '</h1>'
            )
            .append($iframe)
            ;

        $iframe.ready(function()
        {
            var doc = $iframe[0].contentDocument;
            $iframe.css('background', background);

            doc.write(''
                + '<scr' + 'ipt type="text/javascript" src="/sh/scripts/XRegExp.js"></scr' + 'ipt>'
                + '<scr' + 'ipt type="text/javascript" src="/sh/scripts/shCore.js"></scr' + 'ipt>'
                + '<scr' + 'ipt type="text/javascript" src="/sh/scripts/shBrushXml.js"></scr' + 'ipt>'
                + '<scr' + 'ipt type="text/javascript" src="/sh/scripts/shBrushJScript.js"></scr' + 'ipt>'
                + '<link type="text/css" rel="stylesheet" href="/sh/styles/shCore' + themeName + '.css"/>'
                + '<pre type="syntaxhighlighter" class="brush: js; html-script: true; highlight: [5, 20]" title="This is SyntaxHighlighter theme ' + themeName + ' in action!">'
                    + sample
                + '
+ '
'
                    + образец
                + '
' + '' + 'SyntaxHighlighter.highlight ();' + '</ scr' + 'ipt>' ); doc.close (); }); }); $ ('# output a [name]: first'). attr ('name', 'top'); $ ('# output a [href]: last'). attr ('href', '#top'). html ('top'); });

Страница веб-страницы, которую я имею в своем веб-приложении java, хорошо отображается в chrome, но не в firefox 4. Я помню одну и ту же страницу в своем приложении, которая раньше работала нормально в обоих браузерах.

Изменения, внесенные в мою систему, изменились только с тех пор, как приложение правильно отобразило ту же страницу:

  1. Я добавил плагин jquerywtp1.10 в свою среду затмения 3.5.

  2. Обновлен Firefox до версии Firefox 4.

Может ли кто-нибудь помочь мне понять, что я должен делать, чтобы правильно отображать ту же веб-страницу в mozilla firefox 4?

Здесь я получаю сообщение об ошибке, номер строки 29: http://programatori.evonet.ro/images/1308360109285/doctype.jpg

theme_tests.html можно найти по адресу: https://bitbucket.org/alexg/syntaxhighlighter/src/a8771a7fc81d/tests/theme_tests.html

Может ли кто-нибудь просветить меня, как избавиться от этой ошибки?

1 Ответ

1 голос
/ 18 июня 2011

Вы объявили документ строгим документом XHTML. Однако структура документа нарушает правила типа документа. Вложение другого <!DOCTYPE в документ является незаконным. Также недопустимо помещать код JS с неэкранированными объектами XML в строгий документ XHTML. Узнайте о типах документов по номеру http://hsivonen.iki.fi/doctype и проверьте соответствие документа по http://validator.w3.org.

Ваш первый шаг - обернуть этот вложенный документ XHTML в блок <![CDATA[ и переместить весь этот JS в собственный файл .js. Кроме того, наличие атрибута <style> без type вне <head> недопустимо.

Эта проблема не имеет ничего общего с JSP. Это просто базовые (X) знания HTML.

...