Como você pode encontrar todos os endereços IP em um bloco de texto selecionado com um bookmarklet javascript?

StackOverflow https://stackoverflow.com/questions/72921

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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top