Официальный сайт студ.городка НГТУ
Программирование и БД » js+iexplorer: не отображается таблица 

#1  11.11.11 22:50

js+iexplorer: не отображается таблица

Суть такова: юзер выполняет некие действия в ява апплете, затем нажимает "получить таблицу", и формируется таблица с результатами из апплета, затем выводится данная таблица.

Хром и firefox отображают таблицу без проблем.

Эксплорер отрабатывает апплет, но после нажатия кнопки таблица не появляется. Если зайти в "предварительный просмотр", то там есть эта таблица, с нужным содержимым. Получается, она как бы есть, но экплорер не показывает.

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

Что надо экплореру?

Код::

<HTML>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<TITLE> Программа проверки доступности серверов</TITLE>
</head>

<body>
<APPLET ID=applet CODE="Ping.class" ARCHIVE="Ping.jar" NAME="ping" WIDTH=1000 HEIGHT=400>
</APPLET>
<hr>
<input type="button" value="Получить таблицу"/>
<div name="div"><table name="table"></table></div>
<script type="text/javascript">
	var input = document.getElementsByTagName('INPUT')[0];

	var applet = document.getElementById("applet");
		applet.setAttribute("height", 300 + 150*document.ping.NumberOfHosts/16);
	
	input.onclick = function() {
		buildTable();
	}

	function buildTable(){
		var table = document.createElement("table");
		table.setAttribute("name","table");
		table.setAttribute("border",1);
		table.setAttribute("cellspacing",0);
		var i = 0;
		var NumberOfHosts = document.ping.NumberOfHosts;
		var Row;
		var Colomn;
		var CellText = new String("");		
		
		var headerRow = document.createElement("tr");
		var headerColomn = document.createElement("th");
		headerColomn.innerHTML = "IP адрес сервера";
		headerRow.appendChild(headerColomn);
		
		headerColomn = document.createElement("th");
		headerColomn.innerHTML = "IP адрес компьютера";
		headerRow.appendChild(headerColomn);
		
		headerColomn = document.createElement("th");
		headerColomn.innerHTML = "Порт";
		headerRow.appendChild(headerColomn);
		
		headerColomn = document.createElement("th");
		headerColomn.innerHTML = "Назначение сервера";
		headerRow.appendChild(headerColomn);
		
		table.appendChild(headerRow);
		
		for(var i = 0; i < NumberOfHosts; i++){
			if(document.ping.checkStatus(i)){
				for(var j = 0; j < document.ping.Hosts[i].NumberOfIP; j++)
					if(!document.ping.Hosts[i].IsAvailable[j]){
						CellText += document.ping.Hosts[i].HostIP[j].toString() + "<br>";
						}
				if(CellText.length != 0){
					Row = document.createElement("tr");
					Colomn = document.createElement("td");
					Colomn.innerHTML = CellText;
					Row.appendChild(Colomn);
					Colomn = document.createElement("td");
					Colomn.innerHTML = document.ping.LocalHostIP;
					Row.appendChild(Colomn);
					Colomn = document.createElement("td");
					Colomn.innerHTML = "Все";
					Row.appendChild(Colomn);
					Colomn = document.createElement("td");
					Colomn.innerHTML = document.ping.Hosts[i].HostName.toString();
					Row.appendChild(Colomn);
					table.appendChild(Row);
					CellText = new String("");
				}
			}			
		}

		var div = document.getElementsByTagName("div")[0];
		div.removeChild(document.getElementsByTagName("table")[0]);
		div.appendChild(table);
	}
	
</script>
</body>
</HTML>

Offline

#2  12.11.11 03:04

$up
Профиль

Re: js+iexplorer: не отображается таблица

потому что ты неправильно таблицу построил для IE.
В table должна лежать tbody а уже в ней всё остальное.

Offline

#3  12.11.11 10:24

sav
Профиль

Re: js+iexplorer: не отображается таблица

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

Воспользуйся решением, который обсуждается, например, тут:
http://stackoverflow.com/questions/1034 … ing-jquery

Судя по ответу $up, еще и теги таблицы не одинаково поддерживаются браузерами. Надеюсь, наличие tbody не сломает таблицу в других браузерах.

И еще, пара замечаний. Я не работал с апплетами, возможно заблуждаюсь, но результат можно помещать не в document.ping? а вернуть в  виде массива даннных, например JavaScript JSON? Если да, это будет лучше. Глобальное пространство имен, а также document, window засорять не рекомендуется.

Offline

#4  12.11.11 13:27

Re: js+iexplorer: не отображается таблица

$up, спасибо, помогло.
sav, проверил в хроме, лисе и экплорере - нормально таблицы строятся. А благодаря корпоративной политике 99.99% браузеров именно экплорер.
насколько я знаю, не разработчик помещает в document."имя главного класса апплета" результат. таким образом просто можно получить доступ из яваскрипт к public свойствам и методам апплета, т.е. это просто способ обратиться к апплету.

я уверен можно очень сильно улучшить мой вариант программки, но цель ее - облегчить мне жизнь на работе. для меня было проще (и интереснее) сделать нехитрую программку, чем объяснять каждый день по три раза сотрудникам как сделать пинг до того или иного сервера, да и вспоминать какой адрес у какого сервера тоже отнимает время :)
посему меня вполне устраивает текущий вариант программы, хотя он и не лучший с точки зрения программирования.

но за совет спасибо :)

Исправлено ЙожжЫк (12.11.11 13:28)

Offline

Программирование и БД » js+iexplorer: не отображается таблица 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.036 сек.
Выполнено 11 запросов.