Transforme JavaScript em bookmark ou bookmarklet?

3

Eu criei um script que mostra as senhas no hover, assim como o Windows 8 no clique do olho.

Eu fiz essa funcionalidade através do JavaScript com o seguinte código.

function text(){this.type="text"}function password(){this.type="password"}function addHandlers(){var e=false;var t=document.evaluate("//input[@type='password']",document,null,6,null);for(var n=t.snapshotLength-1,r;r=t.snapshotItem(n);n--){if(!e){r.addEventListener("mouseover",text,false);r.addEventListener("mouseout",password,false)}else{r.addEventListener("focus",text,false);r.addEventListener("blur",password,false)}}}addHandlers()

Desculpe pelo código JavaScript compactado, mas quero criar um marcador ou bookmarklet que execute este script ...

Eu tentei:

javascript:(mycode);

Mas não funcionou ...

    
por vishal 08.01.2013 / 13:29

2 respostas

3

Para resolver seu problema específico, consegui que seu código JavaScript fosse executado sem qualquer erro nesta versão:

javascript:(function(){function text(){this.type="text"};function password(){this.type="password"};function addHandlers(){var e=false;var t=document.evaluate("//input[@type='password']",document,null,6,null);for(var n=t.snapshotLength-1,r;r=t.snapshotItem(n);n--){if(!e){r.addEventListener("mouseover",text,false);r.addEventListener("mouseout",password,false)}else{r.addEventListener("focus",text,false);r.addEventListener("blur",password,false)}}};addHandlers();alert("bookmarklet loaded");})();

Para ver se seu código funciona, adicionei um alert("bookmarklet loaded"); no final do bookmarklet. Então você pode tentar e deve - desde que eu testei no Firefox 17 - ver como resultado uma caixa de mensagem aparece. Se o seu código funciona ou não funciona, não posso dizer, mas é claro que essa não é a questão.

Há algumas coisas que você pode ter em mente ou tornar a transformação do código JavaScript em <script></script> tags mais fácil de ser adotada para um bookmarklet

  • No código JavaScript normal, uma nova linha pode separar dois comandos. Bookmarklets estão em uma linha, então substitua o linebreak por um ponto-e-vírgula ; .

Um exemplo aqui

Vamos dar um exemplo. Vamos ter dois snippets de código fonte com duas instruções:

var anumber=1
var atext="hallo"

Quando colocar tudo em uma linha (= fazer o linebreak para espaços em branco) você vai acabar com isso:

var anumber=1 var atext="hallo"

Este não é mais um código JavaScript válido. Se você quer combinar duas instruções em uma linha, você precisa separar / delimitar as duas instruções usando um ponto-e-vírgula como este:

var anumber=1; var atext="hallo"
  • Envolva todo o código nesse tipo de fechamento:
    javascript:(function(){ [...here your code...] })();

Existem alguns sites para investigar a solução. Como aqui .

    
por 08.01.2013 / 14:27
0

Você estava realmente muito perto. Você só precisa colocar desta forma:

javascript:(function(){mycode})();

No seu exemplo, você pode tentar isto:

javascript:(function(){function text(){this.type="text"};function password(){this.type="password"};function addHandlers(){var e=false;var t=document.evaluate("//input[@type='password']",document,null,6,null);for(var n=t.snapshotLength-1,r;r=t.snapshotItem(n);n--){if(!e){r.addEventListener("mouseover",text,false);r.addEventListener("mouseout",password,false)}else{r.addEventListener("focus",text,false);r.addEventListener("blur",password,false)}}};addHandlers()})();

Por favor, preste atenção aos ponto-e-vírgulas ao diminuir seu código, você está perdendo alguns deles.

    
por 26.10.2018 / 15:11