Я полагаю, что это невозможно с помощью API закладок веб-расширения. Это зарезервировано и может быть использовано только в дополнении.
Цитировать:
API-интерфейсы JavaScript для WebExtensions можно использовать внутри расширений
фоновые сценарии и любые другие документы, прилагаемые к
расширение, включая действия браузера или всплывающие окна действий, боковые панели,
страницы параметров или страницы новой вкладки. Некоторые из этих API также могут быть
доступ к сценариям содержимого расширения (см. список в
руководство по содержанию скрипта).
Чтобы использовать более мощные API, вам нужно запросить разрешение в вашем
manifest.json расширения
Я не знаю, находитесь ли вы на Windows или * nix. Общая идея заключается в манипулировании базой данных SQLite.
Для закладок вам нужен файл с именем place.sqlite , который вы можете найти в Windows по адресу - C:\Users\login\AppData\Roaming\Mozilla\Firefox\Profiles
На * nix вы можете сделать:
find . -name 'places.sqlite'
и обычно вы получите его где-нибудь у себя дома:
например.
/home/tukanos/.mozilla/firefox/tf8oiuhk.default/places.sqlite
Сейчас я расскажу только о Windows и PowerShell (вы можете сделать это и для * nix):
Я думаю, что также неплохо бы следовать руководству по лучшим практикам для places.sqlfile
. Обязательно прочитайте его, прежде чем начинать изменять файл.
ПРИМЕЧАНИЕ : сделайте резервную копию своих мест. Пожалуйста, перед игрой с ней!
В PowerShell вы бы
Import-Module pssqlite
(Скачать модуль здесь , если вы используете версию PS <5.0) </p>
Тогда найдите свой путь для places.sqlite
$db = 'C:\Users\login\AppData\Roaming\Mozilla\Firefox\Profiles\tf8oiuhk.default\places.sqlite'
Для запроса базы данных sql:
$sqlFirefoxQuery = "SELECT places.id,
places.URL,
places.GUID,
bookmarks.title,
bookmarks.id,
bookmarks.parent
FROM moz_places as places
JOIN moz_bookmarks as bookmarks
ON places.id = bookmarks.fk"
Invoke-SqliteQuery -DataSource $db -QueryTimeout 20 -Query $sqlFirefoxQuery | Out-file -Encoding UTF8 Bookmarks_firefox.txt
Логика одинакова для вставки, обновления, удаления данных.
Ниже вы можете найти примеры insert
и delete
, так как это был ваш вопрос.
Для вставки данных используйте sql INSERT INTO
Например:
insert into moz_bookmarks (attributes) VALUES (your_values), (next_values)
, например
INSERT INTO moz_bookmarks (type, parent, title, dateAdded)
VALUES (1,5,'MyBookmark',CURRENT_TIMESTAMP)
Для удаления значений вы должны использовать sql's delete
:
DELETE FROM from moz_places
WHERE id=1112
(не забудьте закрыть Firefox)
Используйте ссылку на базу данных - чтобы найти атрибуты: https://developer.mozilla.org/en-US/docs/Mozilla/Tech/Places/Database
Редактировать - Как получить тег из базы данных sqlite?
Чтобы просто перечислить все вкладки в каталоге закладок:
select * from moz_bookmarks where parent=4
Объяснение:
Это даст вам все закладки, хранящиеся в вашем файле place.sqlite. Теги хранятся в столбце title
папка TAG имеет идентификатор = 4
Вы можете проверить идентификатор из таблицы moz_bookmarks_roots
:
╔═══╦═════════════════╦═══════════════╗
║ ║ root_name ║ folder_id ║
╠═══╬═════════════════╬═══════════════╣
║ 1 ║ places ║ 1 ║
║ 2 ║ menu ║ 2 ║
║ 3 ║ toolbar ║ 3 ║
║ 4 ║ tags ║ 4 ║
║ 5 ║ unfiled ║ 5 ║
╚═══╩═════════════════╩═══════════════╝
Теперь, как найти тег с определенными закладками?
Сначала найдите вашу закладку, с которой вы хотите работать
например заголовок из этого вопроса "% Как добавить или удалить тег закладки%"
SELECT * FROM moz_places where title LIKE '%How can I add or remove a bookmark tag%'
Результат:
id : 20079
url : /10270295/kak-dobavit-ili-udalit-teg-zakladki-v-firefox-cherez-komandnuy-stroku
comment89523757_51264053
title : How can I add or remove a bookmark tag in Firefox via the command line? - Stack Overflow
rev_host : moc.wolfrevokcats.
visit_count : 1
hidden : 0
typed : 0
favicon_id : 238
frecency : 125
last_visit_date : 1531301813682000
guid : w6vYlxdKQU6V
foreign_count : 2
url_hash : 47357855952022
Затем вы переходите к таблице moz_bookmarks
, где вы можете найти фактические записи (id
из moz_places
- это fk
из moz_bookmarks
).
select * from moz_bookmarks where fk=20079
Этот результат:
id : 76
type : 1
fk : 20079
parent : 75
position : 0
title : How can I add or remove a bookmark tag in Firefox via the command line? - Stack Overflow
keyword_id :
folder_type :
dateAdded : 1531298577890000
lastModified : 1531298577894000
guid : R0961JLfZYKj
id : 78
type : 1
fk : 20079
parent : 77
position : 0
title :
keyword_id :
folder_type :
dateAdded : 1531298593884000
lastModified : 1531298593884000
guid : BW__oMQbHerd
Как видите, вы получаете две записи. Один имеет parent=75
, который является папкой закладок. Второй - это отображение fk=20079
(id
) в parent=77
, которые являются фактическими тегами:
SELECT * FROM moz_bookmarks where id = 77
Где вы получаете теги в атрибуте title
:
id : 77
type : 2
fk :
parent : 4
position : 0
title : stack_overflow test
keyword_id :
folder_type :
dateAdded : 1531298593878000
lastModified : 1531298593884000
guid : AVcyFpGkrfzV
Итак, теги в моем случае были: stack_overflow
test
Схему E-R для places.sqlite
вы можете найти здесь .
Редактировать 2 Забыл ответить на вопрос напрямую.
При изменении базы данных sqlite закройте Экземпляр Firefox .
К добавить тег - вам нужно понять логику (мне нужно выбрать новую закладку, у которой еще нет тегов):
Сначала нужно создать новую закладку
$sqlFirefoxQuery = "SELECT * FROM moz_places where title LIKE '%Cnn%'"
PS C:\> Invoke-SqliteQuery -DataSource $db -QueryTimeout 20 -Query $sqlFirefoxQuery
id : 20223
url : https://edition.cnn.com/
title : CNN International - Breaking News, US News, World News and Video
rev_host : moc.nnc.noitide.
visit_count : 1
hidden : 0
typed : 0
favicon_id : 2015
frecency : 75
last_visit_date : 1531392673997000
guid : qqCRafq4FIcn
foreign_count : 1
url_hash : 47358730651511
Затем я выбираю из moz_bookmarks
таблицы:
$sqlFirefoxQuery = "select * from moz_bookmarks where fk=20223"
PS C:\> Invoke-SqliteQuery -DataSource $db -QueryTimeout 20 -Query $sqlFirefoxQuery
id : 79
type : 1
fk : 20223
parent : 75
position : 1
title : CNN International - Breaking News, US News, World News and Video
keyword_id :
folder_type :
dateAdded : 1531392718191000
lastModified : 1531392718197000
guid : 2ywnKBmbDWJI
Как видите, есть только одна запись вместо двух (проверьте выше раздел, в котором я выбираю moz_bookmarks
и найдите две записи)
Затем вам нужно найти свободные id
(s) за столом moz_bookmarks
. В моем случае это id=80
и id=81
(в вашем случае они могут отличаться):
Теперь начинается сложная часть, где вы должны получить GUID
. Вы можете получить его через графический интерфейс - SQLite Manager и его SELECT GENERATE_GUID()
. Однако нам нужен один без графического интерфейса, поэтому мы должны его создать.
Если вы проверите функцию Python у геккона makeGuid () , вы увидите, что они используют md5
, hex
. Я сделаю это с аналогичными функциями hex()
и randomblob()
.
Сначала сгенерировать запись тега:
Затем сама запись (type = 2, parent = 4):
id : 80
type : 2
fk :
parent : 4
position : 0
title : news insert_firefox_tag_example
keyword_id :
folder_type :
dateAdded : 1531298593878000
lastModified : 1531298593884000
guid : <generated_GUID>
Фактическая вставка:
$sqlFirefoxQuery = "INSERT INTO moz_bookmarks (id, type, parent, position, title, dateAdded, lastModified, guid)
VALUES (80,
2,
4,
0,
'news insert_firefox_tag_example',
strftime('%s',CURRENT_TIMESTAMP)*1000000,
strftime('%s',CURRENT_TIMESTAMP)*1000000,
hex(randomblob(2)) || hex(randomblob(2)) || hex(randomblob(2)))"
Затем вы должны создать запись, которая связывает это:
id : 81
type : 1
fk : 20223
parent : 80
position : 0
title :
keyword_id :
folder_type :
dateAdded : 1531298593884000
lastModified : 1531298593884000
guid : <generated_GUID>
Фактическая вставка:
$sqlFirefoxQuery = "INSERT INTO moz_bookmarks (id, type, fk, parent, position, dateAdded, lastModified, guid)
VALUES (81,
1,
20223,
80,
0,
strftime('%s',CURRENT_TIMESTAMP)*1000000,
strftime('%s',CURRENT_TIMESTAMP)*1000000,
hex(randomblob(2)) || hex(randomblob(2)) || hex(randomblob(2)))"
Теперь вы можете проверить свою запись, где вы добавили два новых тега news
insert_firefox_tag_example
.
До обновить тег с new_tag
(вы также должны добавить текущие теги!):
$sqlFirefoxQuery = "UPDATE moz_bookmarks
SET title = 'stack_overflow test new_tag'
WHERE id = 77"
Затем выполните его:
Invoke-SqliteQuery -DataSource $db -QueryTimeout 20 -Query $sqlFirefoxQuery
Вы получите обновленные теги:
PS C:\> $sqlFirefoxQuery = "SELECT * FROM moz_bookmarks where id = 77"
PS C:\> Invoke-SqliteQuery -DataSource $db -QueryTimeout 20 -Query $sqlFirefoxQuery
id : 77
type : 2
fk :
parent : 4
position : 0
title : stack_overflow test new_tag
keyword_id :
folder_type :
dateAdded : 1531298593878000
lastModified : 1531298593884000
guid : AVcyFpGkrfzV
Чтобы удалить теги, которые вы можете сделать, просто поместите пустую строку (не забывайте, что изменения, вероятно, будут видны после перезапуска Firefox):
$sqlFirefoxQuery = "UPDATE moz_bookmarks
SET title = ''
WHERE id = 77"
Результат:
PS C:\> $sqlFirefoxQuery = "SELECT * FROM moz_bookmarks where id = 77"
PS C:\> Invoke-SqliteQuery -DataSource $db -QueryTimeout 20 -Query $sqlFirefoxQuery
id : 77
type : 2
fk :
parent : 4
position : 0
title :
keyword_id :
folder_type :
dateAdded : 1531298593878000
lastModified : 1531298593884000
guid : AVcyFpGkrfzV
Вот и все.