Вопрос

Я работаю с издательской системой, которая использует пользовательские теги. Они интерпретируются на сервере. Проблема в том, что они вызывают большие проблемы с Opera при локальном просмотре (пользовательские теги не интерпретируются).

Opera обрабатывает эти теги не так, как в других браузерах. Похоже, что он закрывает тег в конце документа (даже если тег содержит закрывающую косую черту). Мне просто интересно, если такое поведение считается ошибкой или функцией.

Кроме того, если у вас есть идеи, как взломать такой код, чтобы я мог отлаживать HTML + CSS для Opera локально (без интерпретируемых пользовательских тегов), пожалуйста, дайте мне знать. Спасибо.

Попробуйте следующий код, чтобы увидеть его в действии ( живой пример ):

<!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">
<head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Non-standard tag behavior in Opera</title>

    <style type="text/css" media="all">
        div { background: yellow; padding: 1em; }
        nonstandardtag { border: 1px solid red; }
    </style>

</head>

<body>

<div>
    <nonstandardtag>content of non-standard tag</nonstandardtag>
    main tag content
</div>

<div>
    <nonstandardtag />
    main tag content
</div>

</body>

</html>
Это было полезно?

Решение 3

Это, кажется, исправлено в Opera 10 . Так что, думаю, это была не особенность.

Другие советы

Я использую оперу более 5 лет. Это браузер, который лучше всего подходит к стандарту. Большинство сайтов, которые плохо выглядят в Opera, являются & Quot; оптимизированными & Quot; для IE.

Но очевидный вопрос - зачем вам использовать нестандартные теги? Вы можете использовать теги div и span практически для любого нестандартного решения.

Коротко: это не ошибка. Несмотря на DOCTYPE, ваша страница не интерпретируется как XHTML (а это преднамеренно ).

HTML просто не поддерживает синтаксис самозакрывающихся тегов так же, как XML.

В HTML на практике <foo /> совпадает с <foo> или <foo /="">. Теоретически это так же, как <foo></foo>&gt;.

Вы должны указать браузеру интерпретировать страницу как X [HT] ML. DOCTYPE недостаточно. Чтобы сделать это локально, файл должен иметь расширение .xml или .xhtml. Когда вы работаете с файлом по HTTP, вы должны установить заголовок Content-Type на application/xhtml+xml или аналогичный тип XML (для статических файлов обычно text/html расширение файла выполняет свою работу).

Ваш живой пример представлен как <=>, поэтому он не будет интерпретироваться как XHTML и не будет работать так, как вы ожидаете.

Кстати: XHTML не допускает нестандартные элементы. Если вы все равно хотите добавить свои собственные элементы, вам следует как минимум использовать собственное пространство имен.

Во-первых, вам не нужны нестандартные элементы. Во-вторых, что бы вы ни указывали с помощью вашего doctype, это не XHTML, а HTML (как вы ясно дали понять с помощью <meta http-equiv="Content-Type" content="text/html. Это, очевидно, означает, что браузеры используют свои анализаторы HTML , а те - нет ( и не должен) поддерживать сокращенный синтаксис XML <element/> для пустых элементов.

Краткий ответ: нет никаких гарантий или требований в отношении того, что может сделать пользовательский агент, если вы предоставите ему искаженные данные.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top