Ir para conteúdo
Fórum Script Brasil
  • 0

Refresh Por Javascript


Code

Pergunta

Ois,

Eu estou criando um chat, http://www.sobreira.net/vsb/chat.asp , no entanto queria alterar o sistema de refresh.

O sistema de refresh do chat original era em Javascript, mas ele estava a dar muitos problemas principalmente com o Firefox:

function loadEntries(){
  var scriptTag = document.getElementById('loadScript');
  var head = document.getElementsByTagName('head').item(0)

  if (scriptTag){
  head.removeChild(scriptTag);
	}

  script  	= document.createElement('script');
  script.src	= 'load.asp' + '?rnd=' + Math.random();
	script.type	= 'text/javascript';
	script.id  = 'loadScript';
	head.appendChild(script);
}

function setIntervalTimer(interval){
	setInterval(loadEntries,interval);
}
load.asp após todas as rotinas ASP:
  Response.Write ("divChatLog.innerHTML='" & sLogContent & "';" & vbNewline)

divChatLog era um <div> do frame das mensagens do chat.

Então, como eu não percebo quase nada de Javascript, resolvi susbstituir pelo tradicional meta refresh. Tudo funciona a 100% mas como podem ver no chat, o meta refresh fica muito mal num chat.

Eu gostaria de saber se existe alguma hipótese de efectuar o refresh de outra forma mais suave.

Outra coisa, esse sistema de refresh teria que tocar um som (que tá num .swf) cada vez que uma nova mensagem fosse colocada.

A quem me poder e quiser ajudar, eu agradeço, mesmo que seja só dar umas ideias.

Obrigadão a todos.

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

Eu tenho um ficheiro vsb.asp que define as iframes, sendo uma delas a:

document.write('<iframe frameborder="0px" id="frmEntries" name="frmEntries" scrolling="yes" src="'+ scriptURL +'read.asp#scrollToBottom" style="border-color:#AFCFF1;border-style:solid;border-width:0 1 0 1;height:200px;width:160px;"></iframe>');

no read.asp está a referência ao load.js e o div divChatLog.

A partir daí, já sabe.

Grato,

Link para o comentário
Compartilhar em outros sites

  • 0

claro que sim, quantas vezes quiser!

é assim, eu tenho uma página, o load.asp que lê de um ficheiro .txt o log do chat de 5 em 5 segundos, e tenho outra a read.asp que não faz o refresh, e que tem um <div> vazio.

eu quero, a partir da load.asp e através do innerhtml (se possível) actualizar o div do read.asp.

Porquê?

Assim consigo fazer a actualização do chat sem o meta refresh sempre a actualizar o que bastante chato como sabe...

Espero que me tenha feito entender...

Nota: Um aparte, eu estou a criar um site de desafios, em que o visitante para passar para a página seguinte tem que desvendar um enigma que lhe dará a pass da próxima pagina (acho que é uma cena interessante).

Tenho o código Javascript que faz isso:

<script LANGUAGE="JavaScript">
var password = ''
password=prompt('Introduz a password:','');
if (password == 'pass') 
{ alert("Certo!") }
else
{ 
alert("Errado!"); 
location.href= "pass2.htm";
}
</SCRIPT>

Mas se o browser não suportar ou não tiver activo o Javascript ele passa à vontade pelos logins... sad.gif . Como posso resolver isso?

Obrigadão.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom o innerHTML serve para atribuir códigos "html" ou somente textos dentro de uma tag q tenha essa propriedade na sua especificação.

Quanto ao browser não suportar JS, ou ele estar desabilitado você pode fazer uma página padrão para aqueles q entrarem com uma dessa opção e fazer reload dá página atráves de js. Se o cara não tiver habilitado tu mostra a página de erro dizendo q o browser dele não tem suporte a JS. É uma solução, poderia ser outra, é só você dar uma pesquisada.

Link para o comentário
Compartilhar em outros sites

  • 0

ok.

Mas dá para eu fazer um innerhtml do elemento x se o elemento estiver noutro ficheiro?

Tipo:

	document.getElementById("mensagens").innerHTML='texto';

no ficheiro load.asp

se o div mensagens estiver no read.asp?

Quanto à outra questão, como sei se o utilizador suporta Javascript? Existe alguma função (não é Javascript é óbvio), que verifique isso?

Valeu Crystian.

Link para o comentário
Compartilhar em outros sites

  • 0

desculpa a demora...

Eu já alterei algumas partes do código por isso vou explicar tudo de novo.

É assim, eu tenho um ficheiro o vsb.asp que é por assim dizer o "ficheiro-mãe" do script, nele estão as iframes:

document.write('<iframe frameborder="0px" id="frmEntries" name="frmEntries" scrolling="yes" src="'+ scriptURL +'read.asp#scrollToBottom" style="border-color:#AFCFF1;border-style:solid;border-width:0 1 0 1;height:200px;width:160px;"></iframe>');
document.write('<br />');
document.write('<frame id="ler" name="ler" src="load.asp"></frame>')
document.write('<iframe frameborder="0px" name="frmPost" scrolling="no" src="'+ scriptURL +'post.html" framespacing="0" marginheight="0" marginwidth="0" style="border-color:#AFCFF1;border-style:solid;border-width:1;height:20px;width:160px;" noresize></iframe>');
document.write('<br />');
document.write('</div>');
no read.asp que é o ficheiro que deverá mostrar o log do chat no div 'divchatLog', tenho uma chamada ao ficheiro load.asp por sua vez que actualiza de 5 em 5 segundos o log: O <div>:
  <div id="divChatLog"></div>
A chamada:
<script language="JavaScript1.2">
<!--
// Ler o novo log
parent.ler.location.href='load.asp';

// Error Handling
window.onerror = donothing;
function donothing(){
	return true;
}
//-->
</script>
No load.asp, após ir buscar o log a um ficheiro .txt através do ASP e guardar o log na variável sLogContent, ele faz:
Response.Write "<script language=""Javascript"">" & vbcrlf
Response.Write "document.getElementById('divChatLog').innerHTML='"&sLogContent&"';" & vbcrlf
Response.Write "</script>" & vbcrlf

Espero que esteja claro.

Obrigado pelo empenho...

Link para o comentário
Compartilhar em outros sites

  • 0

Code, veja se isto te ajuda:

<script>
function teste() {
  iframe.document.getElementById('iframe_div').innerHTML = "testado!";
}
</script>
<iframe frameborder="0px" id="iframe" name="frmEntries" scrolling="yes" src="b.html" style="border-color:#AFCFF1;border-style:solid;border-width:0 1 0 1;height:200px;width:160px;"></iframe>
<input type=button onclick=teste() value='mudar'>
Dentro do ficheiro b.html, terá que ter um div com o id iframe_div.. assim:
<div id=iframe_div>testando...</div>

O segredo ali é esse:

iframe.document.getElementById('iframe_div').innerHTML = "testado!";

Voce dizer qual a 'janela' que esta o objeto que voce quer mudar a propriedade..

Rafael Rebelo

Link para o comentário
Compartilhar em outros sites

  • 0

Não deu não.

eu tenho agora no load.asp:

  Response.Write "<script language=""Javascript"">" & vbcrlf
  Response.Write "frmEntries.document.getElementById('divChatLog').innerHTML='"&sLogContent&"';" & vbcrlf
  Response.Write "</script>" & vbcrlf
e não envia o sLogContent para o read.asp. De salientar que a estrutura do chat não é igual à das suas iframes, se reparar bem no vsb.asp estão duas frames (uma iframe e frame)
document.write('<iframe frameborder="0px" id="frmEntries" name="frmEntries" scrolling="yes" src="'+ scriptURL +'read.asp#scrollToBottom" style="border-color:#AFCFF1;border-style:solid;border-width:0 1 0 1;height:200px;width:160px;"></iframe>');
document.write('<br />');
document.write('<frame id="ler" name="ler" src="load.asp"></frame>')

e eu quero enviar o texto da 2ª (frame "ler") para a primeira (iframe "frmEntries").

Parece que é mesmo difícil.

Mas obrigado pela tentativa.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,6k
×
×
  • Criar Novo...