Страница работает в FF, а не в IE, с чего начать - PullRequest
3 голосов
/ 29 сентября 2008

У меня есть страница, которая в значительной степени создается сценарием DOM, который генерирует таблицу изображений (обычные элементы img) из нескольких веб-камер (помогая другу с посадкой питомца, а мой HTML / DOM немного заржавел).

Отлично работает в FF3 или Chrome, но не в IE7. Фактически, вся таблица не видна в IE (но применяется цвет фона тела).

Глядя на страницу в IE, ошибок сценариев нет, кажется, что CSS применен ОК, и DOM отображает все ячейки и строки в таблице, которые все сгенерированы.

При использовании панели инструментов разработчика IE при запуске отчета об изображении даже отображаются изображения (даже если они не отображаются в таблице и нет свидетельств того, что таблица на странице отображается как визуализированная, даже текст в ячейках не отображается). т оказано)

Рассматривая элементы img и используя функцию стиля трассировки, я однажды увидел, что все элементы img имеют отображение: none, и он говорит о встроенном стиле, но в моем коде или таблице стилей нет ничего, что могло бы это сделать. Эта проблема, похоже, исчезла, когда я начал добавлять явные записи для каждого элемента таблицы в моей таблице стилей.

С чего начать?

body { background-color : gray ; color : white ; margin : 0 ; font-family : Verdana, "lucida console", arial, sans-serif ; }
#CameraPreviewParent { text-align : center ; width : 100% ; }
#CameraTable { text-align : center ; width : 100% ; }
#CameraLiveParent { text-align : center ; margin : 50px ; }
#CameraLiveHeading { color : white ; }
td.CameraCell { text-align : center ; }
img.CameraImage { border : none ; }
a:link, a:visited, a:active, a:hover { text-decoration : none ; color : inherit ; }
table#CameraTable { color : white ; background-color : gray ; }
td.CameraCell { color : white ; background-color : gray ; }

Полное удаление таблицы стилей не имеет никакого эффекта.

Вот код страницы после генерации (я прошу прощения за форматирование с панели инструментов DOM - я попытался добавить некоторые переводы строки, чтобы было легче читать):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML Strict//EN"><META http-equiv="Content-Type" content="text/html; charset=windows-1252">
<HTML>
<HEAD>
<TITLE></TITLE>
<SCRIPT src="cameras.js" type="text/javascript"> </SCRIPT>
<SCRIPT type="text/javascript">
function CallOnLoad() {
document.title = PreviewPageTitle ;         BuildPreview(document.getElementById("CameraPreviewParent")) ;
}
</SCRIPT>
</HEAD>
<BODY>
<!-- Any HTML can go here to modify page content/layout -->
<DIV id="CameraPreviewParent">
<TABLE id="CameraTable" class="CameraTable">
<TR id="CameraRow0" class="CameraRow">
<TD id="CameraCell0" class="CameraCell"><A id="CameraNameLink0" href="http://192.168.4.3:801" class="CameraNameLink">Luxury Suite 1 (1)</A><BR /><A id="CameraLink0" href="camlive.html?camIndex=0" class="CameraLink"><IMG id="CameraImage0" title="Click For Live Video from Luxury Suite 1 (1)" height="0" alt="Click For Live Video from Luxury Suite 1 (1)" src="http://192.168.4.3:801/IMAGE.JPG" width="0" class="CameraImage" /></A></TD>
<TD id="CameraCell1" class="CameraCell"><A id="CameraNameLink1" href="http://192.168.4.3:802" class="CameraNameLink">Luxury Suite 2 (2)</A><BR /><A id="CameraLink1" href="camlive.html?camIndex=1" class="CameraLink"><IMG id="CameraImage1" title="Click For Live Video from Luxury Suite 2 (2)" height="0" alt="Click For Live Video from Luxury Suite 2 (2)" src="http://192.168.4.3:802/IMAGE.JPG" width="0" class="CameraImage" /></A></TD>
</TR>
</TABLE>
</DIV><!-- This element is used to hold the preview -->
<!-- Any HTML can go here to modify page content/layout -->
</BODY>
</HTML>

Видимо, код DOM, который вставляет по ширине и высоте изображения, не работает правильно в IE:

var PhotoWidth = 320 ;
var PhotoHeight = 240 ;

var image = document.createElement("img") ;
image.setAttribute("id", "CameraImage" + camIndex) ;
image.setAttribute("class", "CameraImage") ;
image.setAttribute("src", thisCam.ImageURL()) ;
image.setAttribute("width", PhotoWidth) ;
image.setAttribute("height", PhotoHeight) ;
image.setAttribute("alt", thisCam.PreviewAction()) ;
image.setAttribute("title", thisCam.PreviewAction()) ;
link.appendChild(image) ;

Ответ о необходимом элементе TBODY при динамическом построении таблиц, по-видимому, является полной проблемой - кажется, что в DOM даже устанавливается ширина и высота изображения на 0!

Ответы [ 4 ]

3 голосов
/ 29 сентября 2008

Я обнаружил одну ошибку: в IE, если вы динамически создаете таблицы, используя document.createElement(), вам нужно table(tbody(tr(tds))). Без tbody таблица не будет отображаться.

1 голос
/ 29 сентября 2008

Меня всегда беспокоит то, что IE неправильно обрабатывает тег <script>, когда он используется как <script src="..." /> вместо открывающего и затем закрывающего тега </script> Я, кажется, сталкиваюсь с этим много, потому что я склонен использовать XSLT для генерации вывода HTML.

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

0 голосов
/ 29 сентября 2008

Исследователь выставлен! на positioniseverything.net перечисляет ошибки, найденные только в IE.

0 голосов
/ 29 сентября 2008

Вы начали со сброса CSS на общую базу? Взгляните на CSS Reset или YUI Reset CSS . (Но без примера страницы, которую мы рассмотрим, мы будем угадывать, в чем же заключается проблема.)

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