Хром-Линкер. Создание Аналога Linkification Для Google Chrome

Создание первой версии описано здесь.

Вы можете прочитать о последней версии Здесь .

Недавно я перешел с Firefox на Google Chrome из-за его простоты и минимализма.

Однако многих преимуществ расширений Firefox катастрофически не хватало.

Например, мне очень часто требуется Linkification — аддон, преобразующий текстовые URL-адреса в HTML-ссылки, и без него жизнь не сладка.

Как вы знаете, неделю назад вышла первая версия Google Chrome (dev), поддерживающая расширения.

И, несмотря на то, что API еще не доработано и очень глючное, я решил побыстрее собрать расширение, реализующее функционал Linkification. Ниже приводится описание процесса создания расширения и ссылка на результат. Насколько я узнал, расширения в Google Chrome состоят из: 1. Manifest.json — обязательный файл с описанием расширения и ссылками на другие файлы.

2. панели инструментов — HTML-файлы, описывающие кнопки, которые появляются в нижней части Chrome. 3. контент-скрипты — файлы javascript, управляющие содержимым веб-страниц.

4. любые другие файлы, которые вы хотите использовать, например изображения, HTML-страницы для всплывающих окон и т. д. Сначала я имел в виду сделать кнопку и скрипт контента, и чтобы этот скрипт контента управлялся этой кнопкой.

К сожалению, связь между панелями инструментов и скриптами содержимого в настоящее время все еще работает с ошибками.

У меня ничего не получилось, так что будет в следующей версии, когда выйдет нормальное API. Поэтому я не буду касаться этой версии без кнопки и темы связи между тулстрипами и контент-скриптами.

Данная версия расширения состоит из 2-х файлов, это файл манифеста и скрипт содержимого javascript, который при загрузке страницы берет на себя весь текст на ней и заменяет текстовые ссылки на HTML. Файл манифеста выглядит следующим образом:

{ "content_scripts": [ { "js": [ "linky.js" ], "matches": [ "", " http://*/* ", " https://*/* " ] } ], "description": "Extension that converts text urls into real html links", "name": "Chrome-linker", "version": "0.1" }

Помимо неинтересного описания, названия и версии, есть

"content_scripts": [ { "js": [ "linky.js" ], "matches": [ " file:///* ", " http://*/* ", " https://*/* " ] } ],

Он описывает, какой js-файл необходимо загрузить, а также совпадения адресов.

Я написал 3, файл, http и https, возможно, потребуется добавить.

Кстати, «*» писать нельзя, ругается он.

Второй файл — это javascript, который меняет все текстовые ссылки на настоящие.

Я украл его с userjs.org, и выглядит он так:

var urlRegex = /\b(((https?|ftp|irc|file|sЭnews):\/\/|(mailto|sЭnews):)[^\s\"<>\{\}\'\(\)]*)/g; //^^^Medium version //var urlRegex = /\b(((https?):\/\/)[^\s\"<>\{\}\'\(\)]*)/g; //^^^Small version //Set this to a class name if you want it to use a style from a stylesheet. var linkClass=''; var preCreatedA=null; var elms = document.evaluate('http://body//text()[not(ancestor::a)][not(ancestor::script)][not(ancestor::style)]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0, elm; elm = elms.snapshotItem(i); i++) { linkifyNode(elm,document); } function linkifyNode(node,mydoc){ var i,tmpData,foundPos,matchedText,middleText,endText,v; var newLinkElement,linkTextNode,skip=0; if(node){ if (node.data){ tmpData=node.data; foundPos=tmpData.search(urlRegex); if (foundPos>=0){ matchedText=RegExp.$1; middleText=node.splitText(foundPos); middleText.deleteData(0,matchedText.length); if (preCreatedA){ newLinkElement=preCreatedA.cloneNode(false); } else{ newLinkElement=mydoc.createElement('a'); newLinkElement.setAttribute('target','_blank'); if (linkClass!=''){ newLinkElement.setAttribute('class',linkClass); } preCreatedA=newLinkElement.cloneNode(false); } newLinkElement.setAttribute('href',matchedText); linkTextNode=mydoc.createTextNode(matchedText); newLinkElement.appendChild(linkTextNode); node.parentNode.insertBefore(newLinkElement,middleText); v=node.parentNode.style.display; //Check if we have a block element, and if not, flash it to //avoid the redraw bug. if (v!='block'){ node.parentNode.style.display='none'; node.parentNode.style.display=v; } skip=1; } } } return skip; }

Я удалил оттуда всякие window.body.onload, потому что скрипты контента выполняются после загрузки документа.

Чтобы проверить, как все работает, в настройках ярлыка Chrome нужно добавить --load-extension="C:\Users\Alex\Desktop\chrome-linker" к пути, где последний, естественно, является путем в папку с файлами.

При перезапуске Chrome загрузил расширение и, перейдя в типичный варезный сайт со ссылками Я выделил все ссылки RapidShare. Ура.

Остается только скомпилировать расширение в crx-файл и опубликовать его в открытом доступе.

Здесь Этот процесс описывается очень просто.

Нужно скачать питон 2.6 , скачайте скрипт для сборки отсюда и запустите:

C:\Users\Alex\Downloads>chromium_extension.py --indir=c:\Users\Alex\Desktop\chrome-linker --outfile=chrome-linker.crx [INFO] Generated extension ID: 23C7C890C288943A468C4316563B9E9712A22ED4 [INFO] created extension package chrome-linker.crx [INFO] chrome-linker.crx contents: [INFO] linky.js [INFO] manifest.json

Готово, файл chrome-linker.crx появился в моей папке загрузок.

Скачать его можно с моей домашней страницы: а вот и он! После установки заходим в хром://расширения/ .

Вы должны увидеть что-то вроде этого:

Хром-линкер.
</p><p>
 Создание аналога Linkification для Google Chrome

Ура! Теперь все URL-адреса будут ссылками.

UPD 1. ID в манифесте указывать не нужно, он генерируется скриптом сборки, прошу прощения за дезинформацию.

, UPD 2. Скорее всего, связь со скриптами контента у меня глючила из-за собственной капризности.

Расширение Google Subscript работает нормально, используя связь между панелями инструментов и сценариями контента.

Так что скоро сделаю новую версию и опишу ее в новом посте P.S. 1. Когда выйдет API, сделаю новую версию с нормальными интерфейсами, если конечно кто-то захочет. P.S. 2. Напишите в комментариях по существу, напишите об опечатках в личном сообщении и скажите, что я ужасный писатель, как я уже знаю.

Теги: #Google Chrome #расширения #chrome-linker #Google Chrome

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.