Chame a função Javascript da barra de URL / endereço

112

É possível chamar uma função javascript a partir do URL? Basicamente, estou tentando aproveitar os métodos JS em uma página que não tenho acesso à fonte.

Algo como: http://www.example.com/mypage.aspx?javascript:printHelloWorld()

Eu sei que se você colocar javascript:alert("Hello World");na barra de endereço, vai funcionar.

Suspeito que a resposta seja não, mas apenas me perguntei se havia uma maneira de fazer isso.

DazManCat
fonte
3
Qual comportamento seu URL teria que exibir - você deseja executar Javascript no contexto desse site?
Pekka
O http:no início do URI diz ao navegador "Quero que você faça uma solicitação HTTP", portanto, a solicitação HTTP o faz. Não há como contornar isso, eu acho.
Constantin
7
Se eu colar javascript:alert("Hi");na barra de endereço do Firefox (28.0) e pressionar Enter, nada acontece. Talvez isso tenha sido desativado? ... Sim, aparentemente ele foi desativado porque os idiotas podem ser convencidos a colar qualquer coisa em sua barra de endereço. Encontrou as informações aqui: stackoverflow.com/a/18782801/111036
mivk
1
copiar colar não funciona, mas se você digitar, funciona, parece que não está desabilitado, mas é analisado quando colado.
Bhabani Sankar Mishra
1
Observação: ele só funciona no Firefox quando 1. você está em uma página real (não vazia) e 2. você coloca explicitamente "javascript:" antes dela.
Andrew

Respostas:

59

Não existe de um hiperlink, não. Não, a menos que a página tenha um script específico para isso e esteja verificando algum parâmetro ... mas para sua pergunta, não, não há suporte embutido nos navegadores para isso.

No entanto, existem bookmarklets que você pode marcar para executar funções JavaScript rapidamente a partir de sua barra de endereço; não tenho certeza se isso atende às suas necessidades, mas é o mais próximo possível.

Nick Craver
fonte
5
Estou basicamente tentando alavancar métodos JS em uma página que não tenho acesso à fonte.
DazManCat
27

Escreva na barra de endereço

javascript:alert("hi");

Certifique-se de escrever no início: javascript:

Hfarazm
fonte
1
Não funciona no Google Chrome versão 80.0.3987.132 (versão oficial) (64 bits). O Chrome remove automaticamente o javascript:prefixo da barra de endereço.
estomia
2
@stomy Infelizmente, você precisa digitar javascript:manualmente
wjandrea
24

Você pode usar URIs de dados. Por exemplo: data:text/html,<script>alert('hi');</script>

Para obter mais informações, visite: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs

yassine45
fonte
1
Eu sempre pensei que url de dados era apenas para imagens, obrigado, isso é realmente incrível :)
Fareed Alnamrouti
2
você não pode anexar isso a um url.
nice_dev
Alguns navegadores podem bloquear isso com uma mensagem:Navigation to toplevel data: URI not allowed (Blocked loading of: “data:text/html,<script>alert('hi');</script>”)
Aleksandr Ryabov
Ele funciona no Google Chrome versão 80.0.3987.132 (versão oficial) (64 bits).
estomia
funciona em Chrome 80.0.3987.162 (Official Build) (64-bit)e emFirefox 72.0.2 (64 bit)
Alex Pandrea,
6

/test.html#alert('heello ')

test.html
<button onClick="eval(document.location.hash.substring(1))">do it</button>
Budia
fonte
13
Observe que esta avaliação de entrada do usuário é uma prática muito perigosa e geralmente não deve ser permitida.
domenukk
6
Sim, isso é bastante insano. Existem locais de trabalho onde você seria demitido por causa desse tipo de insanidade.
Jacob
6
Isso leva a problemas de cross-site scripting (XSS) refletidos, conforme apontado por @domenukk.
pavanw3b de
6

você também pode colocar o seguinte

<a href='javascript:alert("hello world!");'>Click me</a>

ao seu código html, e quando você clicar no hiperlink 'Clique em mim', o javascript aparecerá na barra de url e a caixa de diálogo de Alerta será exibida

heximal
fonte
5
javascript aparecerá na url-bar em qual navegador? Eu nunca vi isso. (Eu sei que javascript: links funcionam, estou apenas falando sobre a barra de URL)
Sean Patrick Floyd
Nem eu. Sei que você pode digitar JS na barra de endereço
DazManCat
É isso que eu estava procurando, como se chama?
ThorSummoner
4

Sobre a window.location.hashpropriedade:

Retorne a parte âncora de um URL.


Exemplo 1:

//Assume that the current URL is 

var URL = "http://www.example.com/test.htm#part2";

var x = window.location.hash;

//The result of x will be:

x = "#part2"

Exemplo 2:

$(function(){   
    setTimeout(function(){
        var id = document.location.hash;
        $(id).click().blur();
    }, 200);
})

Exemplo 3:

var hash = "#search" || window.location.hash;
window.location.hash = hash; 

switch(hash){   
case "#search":  
    selectPanel("pnlSearch");
    break;    
case "#advsearch":    

case "#admin":  

}
Eddy
fonte
3

Usar a resposta de Eddy funcionou muito bem, pois eu tinha o mesmo problema. Basta chamar o seu url com os parâmetros: "www.mypage.html # myAnchor"

Então, em mypage.html:

$(document).ready(function(){
  var hash = window.location.hash;
  if(hash.length > 0){
    // your action with the hash
  }
});
EllemKah
fonte
2

você pode usar assim: por exemplo, você tem uma página: http://www.example.com/page.php então nessa página.php, insira este código:

if (!empty($_GET['doaction']) && $_GET['doaction'] == blabla ){
echo '<script>alert("hello");</script>';
}

então, sempre que você visitar este url: http://www.example.com/page.php?doaction=blabla

então o alerta será chamado automaticamente.

T.Todua
fonte