Нестандартное поведение тегов в Opera - PullRequest
0 голосов
/ 15 января 2009

Я работаю с издательской системой, которая использует пользовательские теги. Они интерпретируются на сервере. Проблема в том, что они вызывают большие проблемы с 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>

Ответы [ 5 ]

2 голосов
/ 15 марта 2009

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

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

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

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

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

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

2 голосов
/ 15 января 2009

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

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

1 голос
/ 18 января 2009

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

0 голосов
/ 16 марта 2009

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

0 голосов
/ 15 января 2009

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

...