Как вы можете найти все IP-адреса в выделенном блоке текста с помощью букмарклета javascript?
-
09-06-2019 - |
Вопрос
Я только начинаю изучать javascript, поэтому у меня нет навыков, чтобы разобраться в том, что, как я полагаю, является тривиальной проблемой.
Я работаю с блогом Wordpress, который служит часто задаваемыми вопросами для нашего сообщества, и я пытаюсь собрать воедино некоторые инструменты, чтобы упростить управление комментариями. Инструменты Greasemonkey от Internet Duct Tape, такие как Comment Ninja, полезны для большей части этого, но я хочу иметь возможность получить список всех IP-адресов, с которых мы получаем комментарии, чтобы отслеживать тенденции и так далее.
Я просто хочу иметь возможность выделить кучу текста на странице комментариев и щелкнуть букмарклет (http://bookmarklets.com) в Firefox появляется всплывающее окно со списком всех IP-адресов, найденных при выборе.
Обновить:
Я как бы объединил ответы из levik и Джейкоб чтобы придумать это:
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)
Разница в том, что вместо тревога сообщение, как и в ответе левика, я открываю новое окно, похожее на ответ Джейкоба.Тот Самый тревога не предоставляет полос прокрутки, что может быть проблемой для страниц с большим количеством IP-адресов.Однако мне нужно было, чтобы список был вертикальным, в отличие от решения Джейкоба, поэтому я воспользовался подсказкой левика, чтобы составить
для вступления вместо левика
.
Спасибо за всю помощь, ребята.
Решение
В Firefox вы могли бы сделать что-то вроде этого:
javascript:alert(
document.getSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g)
.join("\n"))
Как это работает:
- Получает текст выделения из браузера ("document.getSelection()" в FF, в IE это было бы "document.selection.createRange().text")
- Применяет регулярное выражение для преобразования IP-адресов (как предложено Muerr) - в результате получается массив строк.
- Объединяет этот массив в одну строку, разделенную возвращаемыми символами
- Предупреждает об этой строке
Способ получения выделения немного отличается в IE, но принцип тот же.Чтобы сделать его кроссбраузерным, вам нужно будет проверить, какой метод доступен.Вы также могли бы выполнить более сложный вывод (например, создать плавающий DIV и вставить в него все IP-адреса).
Другие советы
Используйте регулярное выражение для определения IP-адреса.Пара примеров:
/\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})+$/
В качестве букмарклета
javascript:document.write(document.getSelection().match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g))
Просто создайте новую закладку и вставьте этот javascript в
Как это сделать в повсеместности
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"));
}
}
})
Здесь это хорошая статья о получении IP-адресов ваших посетителей.Вы могли бы отобразить это в дополнение к их комментарию, если хотите, или включить это в качестве метки или поля на своей странице, чтобы позже ссылаться на это.
Взгляните на букмарклет rot13 ниже приведен пример выделения текста и выполнения действия (в данном случае подстановки) при нажатии на букмарклет.