Autor Zpráva
startIE
Profil *
Dobrý den,

stáhnul jsem si tento script, který funguje krásně ve všech prohlížečích kromě IE7. Prosím o případné rady nebo řešení problému proč to nefachá pod IE7. Předem Vám děkuji za Vaše rady názory.

var windowFocus = true;

var username;
var chatHeartbeatCount = 0;
var minChatHeartbeat = 1000;
var maxChatHeartbeat = 33000;
var chatHeartbeatTime = minChatHeartbeat;
var originalTitle;
var blinkOrder = 0;
var chatboxFocus = new Array();
var newMessages = new Array();
var newMessagesWin = new Array();
var chatBoxes = new Array();
$(document).ready(function(){
originalTitle = document.title;
startChatSession();
$([window, document]).blur(function(){
windowFocus = false;
}).focus(function(){
windowFocus = true;
document.title = originalTitle;
});
});
function restructureChatBoxes(){
align = 0;
for(x in chatBoxes){
chatboxtitle = chatBoxes[x];
if($("#chatbox_"+chatboxtitle).css('display') != 'none'){
if(align == 0){
$("#chatbox_"+chatboxtitle).css('right', '20px');
}else{
width = (align)*(225+7)+20;
$("#chatbox_"+chatboxtitle).css('right', width+'px');
}
align++;
}
}
}
function chatWith(chatuser){
createChatBox(chatuser);
$("#chatbox_"+chatuser+" .chatboxtextarea").focus();
}
function createChatBox(chatboxtitle,minimizeChatBox){
if($("#chatbox_"+chatboxtitle).length > 0) {
if($("#chatbox_"+chatboxtitle).css('display') == 'none'){
$("#chatbox_"+chatboxtitle).css('display','block');
restructureChatBoxes();
}
$("#chatbox_"+chatboxtitle+" .chatboxtextarea").focus();
return;
}
$(" <div />" ).attr("id","chatbox_"+chatboxtitle)
.addClass("chatbox")
.html('<div class="chatboxhead"><div class="chatboxtitle">'+chatboxtitle+'</div><div class="chatboxoptions"><a href="javascript:void(0)" onclick="javascript:toggleChatBoxGrowth(\''+chatboxtitle+'\')">-</a> <a href="javascript:void(0)" onclick="javascript:closeChatBox(\''+chatboxtitle+'\')">X</a></div><br clear="all"/></div><div class="chatboxcontent"></div><div class="chatboxinput"><textarea class="chatboxtextarea" onkeydown="javascript:return checkChatBoxInputKey(event,this,\''+chatboxtitle+'\');"></textarea></div>')
.appendTo($( "body" ));
$("#chatbox_"+chatboxtitle).css('bottom', '0px');
chatBoxeslength = 0;
for(x in chatBoxes){
if($("#chatbox_"+chatBoxes[x]).css('display') != 'none'){
chatBoxeslength++;
}
}
if(chatBoxeslength == 0){
$("#chatbox_"+chatboxtitle).css('right', '20px');
}else{
width = (chatBoxeslength)*(225+7)+20;
$("#chatbox_"+chatboxtitle).css('right', width+'px');
}
chatBoxes.push(chatboxtitle);
if(minimizeChatBox == 1){
minimizedChatBoxes = new Array();
if($.cookie('chatbox_minimized')){
minimizedChatBoxes = $.cookie('chatbox_minimized').split(/\|/);
}
minimize = 0;
for(j=0;j<minimizedChatBoxes.length;j++){
if(minimizedChatBoxes[j] == chatboxtitle){
minimize = 1;
}
}
if(minimize == 1){
$('#chatbox_'+chatboxtitle+' .chatboxcontent').css('display','none');
$('#chatbox_'+chatboxtitle+' .chatboxinput').css('display','none');
}
}
chatboxFocus[chatboxtitle] = false;
$("#chatbox_"+chatboxtitle+" .chatboxtextarea").blur(function(){
chatboxFocus[chatboxtitle] = false;
$("#chatbox_"+chatboxtitle+" .chatboxtextarea").removeClass('chatboxtextareaselected');
}).focus(function(){
chatboxFocus[chatboxtitle] = true;
newMessages[chatboxtitle] = false;
$('#chatbox_'+chatboxtitle+' .chatboxhead').removeClass('chatboxblink');
$("#chatbox_"+chatboxtitle+" .chatboxtextarea").addClass('chatboxtextareaselected');
});
$("#chatbox_"+chatboxtitle).click(function(){
if($('#chatbox_'+chatboxtitle+' .chatboxcontent').css('display') != 'none'){
$("#chatbox_"+chatboxtitle+" .chatboxtextarea").focus();
}
});
$("#chatbox_"+chatboxtitle).show();
}
function chatHeartbeat(){
var itemsfound = 0;
if(windowFocus == false){
var blinkNumber = 0;
var titleChanged = 0;
for(x in newMessagesWin){
if(newMessagesWin[x] == true){
++blinkNumber;
if(blinkNumber >= blinkOrder){
document.title = x+' napsal...';
titleChanged = 1;
break;
}
}
}
if(titleChanged == 0){
document.title = originalTitle;
blinkOrder = 0;
}else{
++blinkOrder;
}
}else{
for(x in newMessagesWin){
newMessagesWin[x] = false;
}
}
for(x in newMessages){
if(newMessages[x] == true){
if(chatboxFocus[x] == false){
$('#chatbox_'+x+' .chatboxhead').toggleClass('chatboxblink');
}
}
}
$.ajax({
url: "./javaChat.php?action=chatheartbeat",
cache: false,
dataType: "json",
success: function(data) {
$.each(data.items, function(i,item){
if(item){ // fix strange ie bug
chatboxtitle = item.f;
if($("#chatbox_"+chatboxtitle).length <= 0){
createChatBox(chatboxtitle);
}
if($("#chatbox_"+chatboxtitle).css('display') == 'none'){
$("#chatbox_"+chatboxtitle).css('display','block');
restructureChatBoxes();
}
if(item.s == 1){
item.f = username;
}
if(item.s == 2){
$("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxinfo">'+item.m+'</span></div>');
}else{
newMessages[chatboxtitle] = true;
newMessagesWin[chatboxtitle] = true;
$("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxmessagefrom">'+item.f+':&nbsp;&nbsp;</span><span class="chatboxmessagecontent">'+item.m+'</span></div>');
}
$("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollHeight);
itemsfound += 1;
}
});
chatHeartbeatCount++;
if(itemsfound > 0){
chatHeartbeatTime = minChatHeartbeat;
chatHeartbeatCount = 1;
}else if(chatHeartbeatCount >= 10){
chatHeartbeatTime *= 2;
chatHeartbeatCount = 1;
if (chatHeartbeatTime > maxChatHeartbeat) {
chatHeartbeatTime = maxChatHeartbeat;
}
}
setTimeout('chatHeartbeat();',chatHeartbeatTime);
}});
}
function closeChatBox(chatboxtitle){
$('#chatbox_'+chatboxtitle).css('display','none');
restructureChatBoxes();
$.post("./javaChat.php?action=closechat", { chatbox: chatboxtitle} , function(data){
});
}
function toggleChatBoxGrowth(chatboxtitle){
if($('#chatbox_'+chatboxtitle+' .chatboxcontent').css('display') == 'none'){
var minimizedChatBoxes = new Array();
if ($.cookie('chatbox_minimized')) {
minimizedChatBoxes = $.cookie('chatbox_minimized').split(/\|/);
}
var newCookie = '';
for(i=0;i<minimizedChatBoxes.length;i++){
if(minimizedChatBoxes[i] != chatboxtitle){
newCookie += chatboxtitle+'|';
}
}
newCookie = newCookie.slice(0, -1)
$.cookie('chatbox_minimized', newCookie);
$('#chatbox_'+chatboxtitle+' .chatboxcontent').css('display','block');
$('#chatbox_'+chatboxtitle+' .chatboxinput').css('display','block');
$("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollHeight);
}else{
var newCookie = chatboxtitle;
if ($.cookie('chatbox_minimized')){
newCookie += '|'+$.cookie('chatbox_minimized');
}
$.cookie('chatbox_minimized',newCookie);
$('#chatbox_'+chatboxtitle+' .chatboxcontent').css('display','none');
$('#chatbox_'+chatboxtitle+' .chatboxinput').css('display','none');
}
}
function checkChatBoxInputKey(event,chatboxtextarea,chatboxtitle){
if(event.keyCode == 13 && event.shiftKey == 0){
message = $(chatboxtextarea).val();
message = message.replace(/^\s+|\s+$/g,"");
$(chatboxtextarea).val('');
$(chatboxtextarea).focus();
$(chatboxtextarea).css('height','44px');
if(message != ''){
$.post("./javaChat.php?action=sendchat", {to: chatboxtitle, message: message} , function(data){
message = message.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\"/g,"&quot;
startIE
Profil *
				$("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxmessagefrom">'+username+':&nbsp;&nbsp;</span><span class="chatboxmessagecontent">'+message+'</span></div>');
				$("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollHeight);
			});
		}
		chatHeartbeatTime = minChatHeartbeat;
		chatHeartbeatCount = 1;
		return false;
	}
	var adjustedHeight = chatboxtextarea.clientHeight;
	var maxHeight = 94;
	if(maxHeight > adjustedHeight){
		adjustedHeight = Math.max(chatboxtextarea.scrollHeight, adjustedHeight);
		if(maxHeight)
			adjustedHeight = Math.min(maxHeight, adjustedHeight);
		if(adjustedHeight > chatboxtextarea.clientHeight)
			$(chatboxtextarea).css('height',adjustedHeight+8 +'px');
	}else{
		$(chatboxtextarea).css('overflow','auto');
	}
}
function startChatSession(){  
	$.ajax({
	  url: "./javaChat.php?action=startchatsession",
	  cache: false,
	  dataType: "json",
	  success: function(data) {
		username = data.username;
		$.each(data.items, function(i,item){
			if(item){ // fix strange ie bug
				chatboxtitle = item.f;
				if($("#chatbox_"+chatboxtitle).length <= 0){
					createChatBox(chatboxtitle,1);
				}
				if(item.s == 1){
					item.f = username;
				}
				if(item.s == 2){
					$("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxinfo">'+item.m+'</span></div>');
				}else{
					$("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxmessagefrom">'+item.f+':&nbsp;&nbsp;</span><span class="chatboxmessagecontent">'+item.m+'</span></div>');
				}
			}
		});
		for(i=0;i<chatBoxes.length;i++){
			chatboxtitle = chatBoxes[i];
			$("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollHeight);
			setTimeout('$("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollHeight);', 100); // yet another strange ie bug
		}
	setTimeout('chatHeartbeat();',chatHeartbeatTime);
	}});
}

jQuery.cookie = function(name, value, options){
  if(typeof value != 'undefined'){ // name and value given, set cookie
    options = options || {};
    if(value === null){
      value = '';
      options.expires = -1;
    }
    var expires = '';
    if(options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)){
      var date;
      if(typeof options.expires == 'number'){
        date = new Date();
        date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
      }else{
        date = options.expires;
      }
      expires = '; expires=' + date.toUTCString();
    }
    var path = options.path ? '; path=' + (options.path) : '';
    var domain = options.domain ? '; domain=' + (options.domain) : '';
    var secure = options.secure ? '; secure' : '';
    document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
  }else{
    var cookieValue = null;
    if(document.cookie && document.cookie != ''){
      var cookies = document.cookie.split(';');
      for(var i = 0; i < cookies.length; i++){
        var cookie = jQuery.trim(cookies[i]);
        if(cookie.substring(0, name.length + 1) == (name + '=')){
          cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
          break;
        }
      }
    }
    return cookieValue;
  }
};
Str4wberry
Profil
Zřejmě to nefunguje, protože je to rozbité.
startIE
Profil *
Aha, tak děkuju za radu :-) Prosím napíše mi někdo konkrétněji co je tam rozbité?
startIE
Profil *
Asi to je reakce na to, že jsem nepopsal problém podrobně, tak si to zasloužím. Script má za úkol při kliknutí na odkaz zobrazit chat okno a to se ve všech mimo ie7 provádí. Dokonce i IE6 to provede jak má, ale ie7 neudělá nic bere to spíš jako prázdný odkaz (javascript:void(0)) nebo co.
Po kliknutí na odkaz pro spuštění js okna me jen přesune nahoru na stejné adrese.
Witiko
Profil
startIE:
To zní spíš na problém stylů než jako problém scriptu. Zašli živou ukázku. :-)
startIE
Profil *
Taky mě to napadlo, ale zaraželo mě, že u jiných se stránka ani nehnula a okno vyskočilo. IE7 nezobrazí okno a stránku posune nahoru. Proto jsem se spíš soustředil na js. Na css cucim taky dlouho a jestli je chyba tady, tak jí přehlížim. Snad moudřejší koukne a pozná co je ta pokažené.
.chatbox{
  position:fixed;
  position:expression("relative");
  width:225px;
  display:none
}

.chatboxhead{
  background:#2e81d1;
  padding:7px;
  color:#fff;
  border-right:1px solid #2e81d1;
  border-left:1px solid #2e81d1
}

.chatboxblink{
  background:#a43872;
  border-right:1px solid #176689;
  border-left:1px solid #176689
}

.chatboxcontent{
  font-family:arial,sans-serif;
  background:#fff;
  font-size:13px;
  color:#333;
  height:200px;
  width:209px;
  overflow:auto;
  overflow-y:auto;
  overflow-x:auto;
  padding:7px;
  border-left:1px solid #ccc;
  border-right:1px solid #ccc;
  border-bottom:1px solid #eee;
  line-height:1.3em
}

.chatboxinput{
  padding:5px;
  border-left:1px solid #ccc;
  background:#fff;
  border-right:1px solid #ccc;
  border-bottom:1px solid #ccc;
}

.chatboxtextarea{
  width:206px;
  height:44px;
  padding:3px 0pt 3px 3px;
  border:1px solid #eee;
  margin:1px;
  overflow:hidden
}

.chatboxtextareaselected{
  border:2px solid #2e81d1;
  margin:0
}

.chatboxmessage{
  margin-left:6px;
  text-align:left
}

.chatboxinfo{
  color:#666
}

.chatboxmessagefrom{
  margin-left:0;
  font-weight:bold
}
.chatboxmessagecontent{}
.chatboxoptions{
  float:right
}

.chatboxoptions a{
  text-decoration:none;
  color:white;
  font-weight:bold;
  font-family:Verdana,Arial,"Bitstream Vera Sans",sans-serif
}

.chatboxtitle{
  float:left
}
startIE
Profil *
Živá ukázka nic nepoví. Jen uvidíte přesně to co Vám píšu :-) všechny prohlížeče OK. jen IE7 při onclicku nespustí okno a posune stránku výš. Žádný přechod jen jí šoupne výš.
startIE
Profil *
Ještě jedna zajímavost: když se klikne na událost, tak se provádí nějaký pcoses protože mi na chvilku zamrzne prohlížeč. Nejdřív posune nahoru stránku a pak se prohlížeč na chvilku zamrzne. Nechápu to.
startIE
Profil *
Odkaz na spuštění
<a href="javascript:void(0)" onclick="javascript:chatWith('nick')">Chatuj</a>
pcmanik
Profil
Nepis si sem prispevky ako na chat.
Ked uz velice vyuzivas jQuery, tak namiesto volania cez ten link si to sprav pomocou selektorou a udalosti click.
Konstanty su aj v javascripte.

A studovat kilometer kodu ti tu nikdo nebude, tak ako povedal Str4wberry mas to rozbite a chce to zivu ukazku.
startIE
Profil *
Píšu sem věci dodatečně, které někomu můžou říct, kde je problém. Bejt na chatu, tak se ptám kdy někdo odepíše. Dělám to snad?

Na co živá ukázka, když žádný chyba se nevypisuje a chování jsem popsal? Nic ve zlém, ale že je tam chyba vím taky! Jinak by jsem to tady nepopisoval, ne?! Některé odpovědi by jsem mohl uveřejnit jako černý humor a natočit film na blbost a pověsit tam tvojí jmenovku. Ted tu nebude žádná reakce nebo reakce na které jsem se neptal :-)

Vím co máte na srdci za reakce, tak předem prosím nazory mimo téma šetřete do jiného dotazu. Děkuji za pochopení
Str4wberry
Profil
Na co živá ukázka, když žádný chyba

To, že se po kliknutí neobjeví žádná chyba, neznamená, že se nějaká chyba neobjeví při pohledu do chybové konzole. Taktéž lze z živé ukázky zjistit, zda se vygeneruje příslušný HTML kód atd.

Ano, dá se řešení najít i bez živé ukázky, ale je to zbytečně zdlouhavé a otravné a zdarma se to zpravidla nikomu dělat chtít nebude. Jinak píšeš, že jsi odněkud ten JS stáhl, nebyla na té stránce živá ukázka a pokud ano, fungovala v Exploreru 7?
startIE
Profil *
Nefunguje ani tam. To je ten problem.
startIE
Profil *
Živá ukázka
Witiko
Profil
startIE:
Chybu se mi nedaří úspěšně reprodukovat. V Internet Exploreru 9 po přepnutí na jádro Internet Exploreru 7 funguje vše jak má.
startIE
Profil *
IE tester mi to nezobrazí. Možná je chyba v emulátoru, tak si to překopu na ie7 a testnu to znova. Děkuju za poznatek
startIE
Profil *
Chci se jenom zeptat jestli jste Vám šlo i odeslání nebo jen zobrazení okna?
Witiko
Profil
startIE:
Šlo vše. A rád bych se připojil k apelu kolegy pcmanika. Toto není chat ani nemoderovaná diskuze - příspěvky si promyslete a své myšlenky spojujte do jednoho příspěvku.
startIE
Profil *
Witiko:
Děkuju za pomoc. Všechno jsem ještě jednou důkladně prošel a zjistil, že podporu pro IE7 tam dát nemůžu. Vzhledem k dalším kodum pro 7 by jsem vytvořil pranici s dalšíma věcma. Musím se smát když microsoft udělá upgrade na 7 a ve finále se zjistí, že 7 má víc chyb jak 6
pcmanik
Profil
startIE:
To je dost pochybne tvrdenie, IE6 je takmer vo vsetkom horsie, je pravda ze IE 7 ma tiez ine musky, ale nechce sa mi verit, ze by nieco v IE 6 islo a v 7 uz nie, radsej sa poriadne pozri na ten kod, urcite tam nieco najdes.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0