vaflya
@vaflya
Ничего личного, это всего лишь хобби.

Как реализовать фичи в расширении?

День добрый!

Воспользовался поиском, смотрел документацию, но так ничего не понял. Подскажите:

1 - в расширении для chrome существует 3-и типа скриптов:
  • background.js - в фоне работа с DOM нужных страниц
  • popup.js - работа с интерфесом расширения
  • content script - ???


2. При нажатии на расширение отображается список доступных proxy, он должен подгрузится с сервера www.proxybeatch.io. Запрос на получение и модификацию popup.html, popup.js не дает. Я так понял вся логика должна быть в background?

3. Не могу допетрить как общаться из background.js в popup.js

4. Как установить бэйдж не из popup.js а из background.js?
chrome.browserAction.setBadgeText({text: '10+'});
chrome.browserAction.setBadgeBackgroundColor({color: '#ff0000'});


5. Как сделать периодическую проверку новых прокси на серваке (в фоне раз в 1 час проверял списки на сервере и если есть новые, то выставлял бэйдж)?

6. Добавление прокси с вэб страницы:
То-есть на каком то сайте есть ссылка, по нажатию на которую добавляется (отправляется) строка с адресом ip в расширение (как в телеге). Такое возможно?

7. Когда открывается popup.html расширения, выглядит это как анимированное разворачивание, как отключить?

Если нужно, предоставлю скрипты и манифест(дал все возможные встречающиеся разрешения в доках)
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
1.
существует 3-и типа скриптов
Все три сразу можно и даже нужно, если требуется для целей расширения. Единственное, content script на все сайты пользователи не любят, т.к. расширение получает слишком много опасных с точки зрения приватности и безопасности прав. А вот content script на конкретный сайт (со ссылками на прокси) или 2-3 сайта - можно, это выглядит хорошо.

2.
Запрос на получение и модификацию popup.html, popup.js не дает
Расширению нужны права на доступ к www.proxybeatch.io (либо доступ вообще ко всем сайтам):
"permissions": [ "https://www.proxybeatch.io/*" ],

3.
как общаться из background.js в popup.js

Никак.
popup.js - временный скрипт. Он выгружается, когда закрывается окно. Хотя это зависит от браузера, может остаться фантомно - это тонкий момент, который нужно учесть при разработке для Firefox и Chrome одновременно.
Вообще можно из popup обратиться к background и там оставить ссылку на себя. Но обращение по этой ссылке опасно.
Лучше делать так: в background происходят все основные процессы и имеют разную степень готовности. А popup просто получает готовую инфу и отображает её. Сам popup при этом никуда не стучится, а отдает задания для background, который уже неспешно занимается обновлением и сортировкой данных.

4.
бэйдж не из popup.js а из background.js

Не знаю, в чем сложность. Бейдж устанавливается абсолютно также. Вероятно, у вас какой-то баг в коде.

5.
Как сделать периодическую проверку

setInterval()
Ну или есть вариант через alarms, но в целом без разницы.

6.
прокси с вэб страницы. Такое возможно?

Возможно. Это должен быть либо ваш сайт, либо вы должны хорошо знать формат, в котором представлены списки прокси. Проблема решается контент скриптом для данного конкретного сайта. Этот скрипт добавляет к ссылкам соответствующий обработчик, или даже целую кнопку рядом с инфой о прокси.

7.
анимированное разворачивание popup, как отключить?

У меня нет никаких анимаций. Возможно, это какие-то настройки самого браузера или ОС, точно не знаю. В любом случае, это проблема пользователя расширения, а не разработчика расширения. Как пользователь, ищите настройки в другом месте.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vaflya
@vaflya Автор вопроса
Ничего личного, это всего лишь хобби.

3. Как общаться из background.js в popup.js

Один из вариантов через storage:
manifest.js
"permissions": [
        "storage"
  ]


background.js
function getUpdates()
{
  $.ajax({
    url: server + '/api/updates', 
    success: function(data){
      setStorage('updates', data);
    }
  }); 
}

function setStorage(key, value)
{
    chrome.storage.local.set({[key]: value}, function() {
          console.log('Value is set to ' + value);
        });
}

popup.js
function getStorage(key) {
    var ar = [];
    var data = '';
    ar.push(key);
  return new Promise(function(resolve, reject) {
    chrome.storage.local.get(key, function(obj) {
      if (chrome.runtime.lastError) {
        console.error(chrome.runtime.lastError.message);
        reject(chrome.runtime.lastError.message);
      } else {
        resolve(obj[ar[0]]);
      }
    });
  });
}
getStorage('updates').then(function(item) {
  console.log(item);
});;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы