Como você pode encontrar todos os endereços IP em um bloco de texto selecionado com um bookmarklet javascript?
-
09-06-2019 - |
Pergunta
Estou apenas começando a aprender javascript, então não tenho as habilidades necessárias para descobrir o que presumo ser um problema trivial.
Estou trabalhando com um blog Wordpress que serve como FAQ para nossa comunidade e estou tentando reunir algumas ferramentas para facilitar o gerenciamento dos comentários. Ferramentas Greasemonkey da Internet Duct Tape, como Comment Ninja, são úteis para a maior parte, mas quero obter uma lista de todos os endereços IP dos quais estamos recebendo comentários para rastrear tendências e assim por diante.
Eu só quero poder selecionar um monte de texto na página de comentários e clicar em um bookmarklet (http://bookmarklets.com) no Firefox que abre uma janela listando todos os endereços IP encontrados na seleção.
Atualizar:
Eu meio que combinei as respostas de levique e Jacó para chegar a isso:
javascript:ipAddresses=document.getSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g).join("<br>");newWindow=window.open('', 'IP Addresses in Selection', 'innerWidth=200,innerHeight=300,scrollbars');newWindow.document.write(ipAddresses)
A diferença é que em vez de um alerta mensagem, como na resposta de Levik, abro uma nova janela semelhante à resposta de Jacob.O alerta não fornece barras de rolagem, o que pode ser um problema para páginas com muitos endereços IP.No entanto, eu precisava que a lista fosse vertical, ao contrário da solução de Jacob, então usei a dica de Levik para fazer uma
para a junção em vez do levik
.
Obrigado por toda a ajuda pessoal.
Solução
No Firefox, você poderia fazer algo assim:
javascript:alert(
document.getSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g)
.join("\n"))
Como isso funciona:
- Obtém o texto da seleção do navegador ("document.getSelection()" no FF, no IE seria "document.selection.createRange().text")
- Aplica uma expressão regular para marcar os endereços IP (conforme sugerido por Muerr) - isso resulta em uma matriz de strings.
- Une esta matriz em uma string separada por caracteres de retorno
- Alerta essa string
A forma como você faz a seleção é um pouco diferente no IE, mas o princípio é o mesmo.Para que seja compatível com vários navegadores, você precisa verificar qual método está disponível.Você também pode fazer uma saída mais complicada (como criar um DIV flutuante e inserir todos os IPs nele).
Outras dicas
Use uma expressão regular para detectar o endereço IP.Alguns exemplos:
/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/
/^([1-9][0-9]{0,2})+\.([1-9][0-9]{0,2})+\.([1-9][0-9]{0,2})+\.([1-9][0-9]{0,2})+$/
Como um bookmarklet
javascript:document.write(document.getSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g))
Basta criar um novo favorito e colar esse javascript
Como fazer isso na Ubiquity
CmdUtils.CreateCommand({
name: "findip",
preview: function( pblock ) {
var msg = 'IP Addresses Found<br/><br/> ';
ips = CmdUtils.getHtmlSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g);
if(ips){
msg += ips.join("<br/>\n");
}else{
msg += 'None';
}
pblock.innerHTML = msg;
},
execute: function() {
ips = CmdUtils.getHtmlSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g);
if(ips){
CmdUtils.setSelection(ips.join("<br/>\n"));
}
}
})
Aqui é um bom artigo sobre como obter o endereço IP de seus visitantes.Você pode exibir isso além do comentário, se desejar, ou incluí-lo como um rótulo ou campo em sua página para poder referenciá-lo mais tarde.
Dê uma olhada no marcador rot13 para obter um exemplo de seleção de texto e execução de uma ação (neste caso, substituição) quando o bookmarklet é clicado.