Estou fazendo um aplicativo de teste online em php. Quero restringir o usuário a voltar em um exame. Eu tentei o seguinte script, mas ele interrompe meu cronômetro. O que devo fazer?
Eu incluí o código fonte. O cronômetro é armazenado em cdtimer.js
<script type="text/javascript">
window.history.forward();
function noBack()
{
window.history.forward();
}
</script>
<body onLoad="noBack();" onpageshow="if (event.persisted) noBack();" onUnload="">
Eu tenho o temporizador do exame, que leva uma duração para o exame a partir de um valor mysql . O temporizador inicia de acordo, mas para quando eu coloco o código para desativar o botão Voltar. Qual é o meu problema?
javascript
browser
Sawant Akshay
fonte
fonte
Respostas:
Existem inúmeras razões pelas quais desativar o botão Voltar realmente não funciona. Sua melhor aposta é avisar o usuário:
Esta página lista várias maneiras pelas quais você pode tentar desativar o botão Voltar, mas nenhuma é garantida:
http://www.irt.org/script/311.htm
fonte
Geralmente, é uma má idéia substituir o comportamento padrão do navegador da web. O script do lado do cliente não tem o privilégio suficiente para fazer isso por motivos de segurança.
Também são feitas algumas perguntas semelhantes,
Como posso impedir que a tecla backspace navegue de volta?
Como impedir a ação voltar do histórico padrão do navegador para o botão backspace com JavaScript?
Você pode-não realmente desativar botão do navegador de volta. No entanto, você pode fazer mágica usando sua lógica para impedir que o usuário volte, o que criará uma impressão como se estivesse desativada. Aqui está como, confira o seguinte trecho.
Como o JavaScript é puro, funcionaria na maioria dos navegadores. Também desabilitaria a tecla backspace, mas a chave funcionará normalmente dentro dos
input
campos etextarea
.Configuração recomendada:
Coloque esse trecho em um script separado e inclua-o na página em que deseja esse comportamento. Na configuração atual, ele executará o
onload
evento DOM, que é o ponto de entrada ideal para esse código.Trabalhando DEMO!
Testado e verificado nos seguintes navegadores,
fonte
location.hash
inicialmente, por isso me fez fazê-lo assim. Poderia haver mais melhorias nisso, mas 50 ms apenas uma vez não me custaram muito, então deixo lá.Me deparei com isso, precisando de uma solução que funcionasse corretamente e "de maneira adequada" em vários navegadores, incluindo o Mobile Safari (iOS9 no momento da postagem). Nenhuma das soluções estava certa. Eu ofereço o seguinte (testado no IE11, FireFox, Chrome e Safari):
Observe o seguinte:
history.forward()
(minha solução antiga) não funciona no Mobile Safari --- parece não fazer nada (ou seja, o usuário ainda pode voltar).history.pushState()
funciona em todos eles.history.pushState()
é um URL . Soluções que passam uma sequência como'no-back-button'
ou'pagename'
parecem funcionar bem, até você tentar Atualizar / Recarregar na página, quando o erro "Página não encontrada" é gerado quando o navegador tenta localizar uma página com essa URL. (É provável que o navegador inclua essa sequência na barra de endereço quando estiver na página, o que é feio.)location.href
Deve ser usado para o URL.history.pushState()
é um título . Olhando pela web, a maioria dos lugares diz que "não é usado", e todas as soluções aqui passamnull
por isso. No entanto, no Mobile Safari, pelo menos, isso coloca o URL da página no menu suspenso do histórico que o usuário pode acessar. Porém, quando adiciona uma entrada para uma visita à página normalmente, coloca seu título , o que é preferível. Então, passardocument.title
por isso resulta no mesmo comportamento.fonte
fonte
window.history.back()
função. Queremos impedir que os usuários cliquem no botão voltar do navegador, mas, em alguns casos, fornecemos nosso próprio botão voltar na página. Existe alguma maneira de fazê-lo funcionar?Esse código desabilitará o botão voltar dos navegadores modernos que suportam a API de histórico do HTML5. Em circunstâncias normais, pressionar o botão Voltar retorna um passo para a página anterior. Se você usar history.pushState (), começará a adicionar sub-etapas extras à página atual. A maneira como funciona é: se você usar o history.pushState () três vezes, comece a pressionar o botão Voltar, nas três primeiras vezes em que voltará a navegar nessas subetapas e na quarta vez em que voltará a a página anterior.
Se você combinar esse comportamento com um ouvinte de
popstate
evento, poderá configurar essencialmente um loop infinito de sub-estados. Então, você carrega a página, pressiona um subestado e depois pressiona o botão voltar, que abre um subestado e também empurra outro, portanto, se você apertar o botão voltar novamente, ele nunca ficará sem subestados para pressionar . Se você achar que é necessário desativar o botão Voltar, isso o levará até lá.fonte
no-back-button
... (É provável que o navegador também seja exibidono-back-button
no endereço bar também, o que parece feio.) Para ser justo, essa não é a única solução aqui que sofre com isso. O terceiro argumento parahistory.pushState()
é um URL e deve ser o URL da sua página atual: use emlocation.href
vez disso.Para restringir o evento de retorno do navegador
fonte
fonte
Esta é a maneira que eu poderia fazê-lo. Estranhamente, mudar a janela. O local não funcionou bem no chrome e no safari. Acontece que o location.hash não cria uma entrada no histórico para chrome e safari. Então você terá que usar o pushstate. Isso está funcionando para mim em todos os navegadores.
fonte
$(document).ready(function () { .... });
fonte
event.persisted
?Este artigo em jordanhollinger.com é a melhor opção que eu sinto. Semelhante à resposta de Razor, mas um pouco mais clara. Código abaixo; créditos completos a Jordan Hollinger:
Página anterior:
Página do JavaScript sem retorno:
fonte
Este javascript não permite que nenhum usuário volte (funciona no Chrome, FF, IE, Edge)
fonte
Experimente com facilidade:
fonte
Este código foi testado nos navegadores Chrome e Firefox mais recentes.
fonte
Função muito simples e limpa para quebrar a seta traseira sem interferir com a página posteriormente.
Benefícios:
onbeforeunload
setInterval
para não quebrar os navegadores lentos e sempre funciona.unbeforeunload
que interrompe o usuário com o diálogo modal.Nota: algumas das outras soluções são usadas
onbeforeunload
. Por favor, não useonbeforeunload
para esta finalidade, que abre uma janela sempre que os usuários tentam fechar a janela, backarrow hit, etc. Modais comoonbeforeunload
são geralmente apropriado apenas em raras circunstâncias, como quando eles realmente fez alterações na tela e paraíso' os salvou, não para esse fim.Como funciona
É isso aí. Sem mais brincadeiras, sem monitoramento de eventos em segundo plano, nada mais.
Use-o em um segundo
Para implantar, basta adicionar isso em qualquer lugar da sua página ou em seu JS:
fonte
Parece que isso funcionou para desativar o botão voltar no navegador, bem como o botão voltar atrás.
fonte
fonte
Você simplesmente não pode e não deve fazer isso. No entanto, mas isso pode ser útil
Funciona no meu chrome e firefox
fonte
Tente isso para evitar o botão backspace no IE, que por padrão atua como "Voltar":
fonte
Acredito que a solução perfeita, na verdade, é bastante direta, que usei há muitos anos.
É basicamente atribuir o evento "onbeforeunload" da janela, juntamente com os eventos 'mouseenter' / 'mouseleave' do documento em andamento, para que o alerta seja acionado apenas quando os cliques estiverem fora do escopo do documento (que poderia ser o botão voltar ou avançar do navegador)
fonte
Em um navegador moderno, isso parece funcionar:
fonte
Nenhuma das respostas mais votadas funcionou para mim no Chrome 79 . Parece que o Chrome mudou seu comportamento em relação ao botão Voltar após a versão 75, veja aqui:
https://support.google.com/chrome/thread/8721521?hl=en
No entanto, nesse segmento do Google, a resposta fornecida por Azrulmukmin Azmi no final funcionou. Esta é a solução dele.
Não entendo completamente o que ele escreveu, mas, aparentemente,
history.back() / history.forward()
agora é necessário um adicional para bloquear o Back in Chrome 75+.fonte
Eu crio uma página HTML (index.html). Eu também crio um (mechanic.js) dentro de uma pasta / diretório (script). Em seguida, coloco todo o meu conteúdo dentro de (index.html) usando as tags form, table, span e div, conforme necessário. Agora, aqui está o truque que fará o retrocesso / avanço não fazer nada!
Primeiro, o fato de você ter apenas uma página! Segundo, o uso de JavaScript com tags span / div para ocultar e exibir conteúdo na mesma página quando necessário através de links regulares!
Dentro de 'index.html':
Dentro de 'mechanic.js':
Parece cabeludo, mas observe os nomes e chamadas das funções, HTML incorporado e as chamadas de identificação da tag de extensão. Isso foi para mostrar como você pode injetar HTML diferente na mesma tag de span na mesma página! Como o Back / Forward pode afetar esse design? Não pode, porque você está ocultando objetos e substituindo outros na mesma página!
Como esconder e exibir? Aqui vai: Funções internas no 'mecanismo.js' conforme necessário, use:
Dentro das funções de chamada 'index.html', através de links:
e
Espero não ter lhe dado dor de cabeça. Desculpe se eu fiz :-)
fonte
No meu caso, essa foi uma ordem de compra. Então, o que eu fiz foi desativar o botão. Quando o usuário clicou em voltar, o botão ainda estava desativado. Quando eles clicaram em mais uma vez e, em seguida, clicaram em um botão de página para avançar. Eu sabia que o pedido foi enviado e pulado para outra página.
No caso em que a página realmente atualizou, o que tornaria o botão (teoricamente) disponível; Pude reagir no carregamento da página que o pedido já foi enviado e redirecionar também.
fonte
fonte
javascript:
você escreveu define um rótulo JavaScript chamado "javascript". Duvido muito que você pretendesse isso; Eu suspeito que você esteja se misturandohref=javascript:...
com<script>
blocos JavaScript . 2.language="JavaScript"
deixou de ser um<script>
atributo válido no HTML5. 3. Os 2 pontos acima não importam muito; o que importa é quehistory.forward(1)
não funciona no Mobile Safari (pelo menos). Use uma dashistory.pushState()
respostas.Você pode simplesmente colocar um pequeno script e depois verificar. Não permitirá que você visite a página anterior. Isso é feito em javascript.
A função window.onunload é acionada quando você tenta visitar a página anterior ou anterior através do navegador.
Espero que isto ajude.
fonte
Eu tive esse problema com o React.JS. (componente de classe)
E resolva facilmente
Eu usei
HashRouter
a partirreact-router-dom
.fonte
Basta definir
location.hash="Something"
: Ao pressionar o botão Voltar, o hash será removido do URL, mas a página não voltará. Esse método é bom para evitar a volta acidental, mas por motivos de segurança, você deve projetar seu back-end para impedir a resposta.fonte
fonte