Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Skoitoman

Janelas abertas na mesma sessão

Recommended Posts

Amigos como descobrir se uma janela do mesmo site foi aberta com shift ou com botão direito nova janela.

 

Consegui resolver este problema no IE com opener.opened mas no firefox da um erro de que opener não possui atributos.

 

Alguem pode porfavor me ajudar resolver este problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

OI, ainda assim não funciona, veja o código:

 

var minhaJanela;  
  
		function VerificaJanela()   
		{
				minhaJanela = opener.opener.name;

				if (opener.opener.closed!=false)			
					document.getElementById("txtTeste1").value=minhaJanela;
		}

Este é o erro que aparece:

 

opener has no properties, nesta linha: minhaJanela = opener.opener.name;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Skoitoman, você está consultando alguma referência ?

 

você está usando métodos que não existem por isso ocorrem os erros.

 

pesquise por

 

 

"firefox opener.opener"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hinom, preciso saber apenas se a janela está aberta.

 

Eu consegui faze-lo funcionar no FF mas apenas se eu abrir a janela com window.open, este processo não funciona se a jalena é aberta com shift ou com botão direito nova janela, eu não posso bloquear esta opção em meu site, mas preciso saber quando isso aconteceu entendeu?!

 

O opener.opener fuciona apenas se a janela é aberta com script.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O opener.opener fuciona apenas se a janela é aberta com script.

isso mesmo.

 

no firefox, esse recurso funciona somente após iniciar a sessão do window.open

 

 

o que você pretende fazer ?

 

você quer apenas saber se o usuário utilizoup shift ou o context-menu ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, se o usuario estiver logado um script sera executado a cada 7 segundos, mas se for utilizado o shift para abrir uma nova janela, este mesmo scrit será executado 2 vezes neste período, se abrir mais uma então 3. Se o usuario abrir outro navegador e digitar o endereço do site não tem problema por causa da sessão. Mas eu preciso evitar este caso.

 

No ie utilizando o opener eu rosolvo este problema, mas e agora no ff?

 

Tem alguma dica?

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi!

 

no seu caso, é possível criar um script que verifique se o usuário está segurando a tecla shift

 

fiz um exemplo pra você entender. talvez seja útil:

 

salve como tmp.html

<script language="JavaScript">


document.onkeydown = checkKeycode
document.onkeyup = checkKeycode2
function checkKeycode(e) {
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;
//alert("keycode: " + keycode);
	if( keycode == 16 ){ // shift key
		//alert('down');
		callAct(1);
	}
}

function checkKeycode2(e) {
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;
//alert("keycode: " + keycode);
	if( keycode == 16 ){ // shift key
		//alert('up');
		callAct(2);
	}
}

function setar_obj( eln ){
	var rr = false;
	if( document.all ){
		if(  document.all[eln]  ){
		rr = document.all[eln];
		}
	}else{
		if(  document[eln]  ){
		rr = document[eln];	
		}else{
			if(  document.getElementById(eln)  ){
			rr = document.getElementById(eln );
			}
		}
	}
	return rr;
}

function chk_clk( obj ){

	objtmpF = getOBJ();

	if( objtmpF.value == 1 ){
		vv  = obj.save;
		vv += '?nw=1';
	}else{
		vv  = obj.save;
	}
	obj.href = vv;

}

function getOBJ(){
	frmName = 'form1';
	objtmp  = setar_obj( frmName );
	return objtmp['newwin'];
}

function callAct( n ){

	objtmpF = getOBJ();

	if( n == 1 ){ // down
		objtmpF.value = 1; // user hold down shift key
	}else{ // up
		objtmpF.value = 0; // user hold up shift key
	}

}

</script>

<form name=form1><input type=text name=newwin value=0></form>

<a href='tmp.html' save='tmp.html' onclick='chk_clk(this);'>TESTE</a>

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok

 

mas nao precisa capturar o clique

 

desculpe, eu tinha esquecido de esplicar o script

 

 

esse script acima captura quando o usuário pressiona a tecla shift e também captura o momento que o usuário solta

 

quando pressiona o shift, o objeto newwin ( <form name=form1><input type=text name=newwin value=0></form> ) recebe o valor 1. Isso quer dizer que o usuário pressionou o shift

 

quando solta a tecla o valor de newwin retorna para 0. Quer dizer que soltou a tecla.

 

não sei se exite uma função nativa do javascript que verifique se uma tecla está sendo segurada, por isso fiz dessa forma.

 

 

nos links onde você quer fazer a verificação se o usuário está pressionando o shift basta colocar esse script

onclick='chk_clk(this);'

 

exemplo. o script em negrito deve ser adicionado nos links que devem ser monitorados:

<a href='tmp.html' save='tmp.html' onclick='chk_clk(this);'>TESTE</a>

a função chk_clk() retornará um parâmetro adicional à própria URL. Nesse caso está sendo criado o parâmetro "nw=1"

ou seja, quando o usuário pressionar shift e clicar no link, a nova janela abrirá assim tmp.htm?nw=1

 

desse modo, na nova janela você saberá se foi pressionado o shift apenas verificando se existe o parâmetro nw com valor = 1.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aieeee hinom, sei q você não vai ter paciencia de ler o que eu fiz acho também que nem vai usar isso aqui, mas é so pra encerrar o tópico. Mano depois de muita dor de cabeça consegui resolver 90% deste problema, pode se dizer que é um cambalaxo, gambiarra digna daquelas de mecânicos que colam escapamento com super bonder, mas deu certo.

 

Alias quanto a solução q você me deu, existe um evento q traz um valor booleano q indica sim se a tecla shift está pressionada: "event.shiftKey", mas desisti da idéia pois iria ter de travar o botão direito.

 

Ja que eu precisava ter certeza se o usuário abriu duas Janelas apenas se estiver logado eu posso usar isso ao meu favor obrigando o usuário a ter no mínimo uma página a mais no histórico de seu navegador.

 

Quanto ao firefox, sempre que ele abrir uma nova janela usando o shift ou botão direito, o tamanho do historico vai ser sempre 1, neste caso da pra susbstituir o opener se comparar o document.referrer.

 

O problema era, se ele clicar em qualquer link ja não vai dar pra comparar o historico e mais nada, e não da pra usar sessão, cookie, banco de dados nem nada para identificar o navegador aberto.

 

Então usei uma página com um iframe especial para navegação, e um hidden so para indicar se o navegador foi aberto com o shift.

 

Da uma Olhadinha

 

Página Principal

CODE
<html>

<body onload="window.name='JanelaPrincipal'">

<div style="display:none"><input type="hidden" value="" id="txtTeste1"/></div>

<iframe width="100%" height="80%" src="Navegacao.asp"></iframe>

</body>

</html>

 

Ai Basta Adicionar este Código nas outras páginas:

CODE
function VerificaNovaJanela()

{

var strReferencia='teste_script'; //dominio do site

var hdnJanelaAberta='txtTeste1'; //ID do hidden que armazena o valor

var strValorHidden='Ja existe uma janela aberta'; //Valor a ser analizado no hidden

var strRefencia;

 

//### Verifica se a janela principal está aberta

if (parent.name!='JanelaPrincipal')

{

document.location='http://localhost/teste_script/sk/janelaprincipal.asp';

}

else

{

//### Verifica o Status da caixa Janela Aberta

if (parent.document.getElementById(hdnJanelaAberta).value==strValorHidden)

{

if (navigator.appName=="Microsoft Internet Explorer")

{

try

{

//### Verifica Se a Janela Opener está aberta e a referência

strRefencia=parent.opener.document.location;

strRefencia=toString(strRefencia).toLowerCase().indexOf(strReferencia);

if ((parent.opener.closed==false) && (strRefencia>=0))

parent.document.getElementById(hdnJanelaAberta).value=strValorHidden;

else

{

//### Procedimentos a serem executados

}

}

catch(e)

{

//### Procedimentos a serem executados

}

}

else

{

//### Verifica a Referencia e tamanho do historico

strRefencia=document.referrer.toLowerCase().indexOf(strReferencia);

if ((history.length==1) && (strRefencia>=0))

parent.document.getElementById(hdnJanelaAberta).value=strValorHidden;

else

{

//### Procedimentos a serem executados

}

}

}

else

{

parent.document.getElementById(hdnJanelaAberta).value=strValorHidden;

}

}

}

 

Ufaaa, bom valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.