JavaScript/Nodejs - Расширение Chrome -> Как отключить расширение или что-то вроде того, если пользователь не вошел в систему?

Как отключить расширение или что-то вроде, если пользователь не авторизовался?

Если пользователь не вошел в систему, я хочу, чтобы пользователь не использовал сценарий содержимого productDetails.

Это мой код расширения и внутренний код.

Пожалуйста, помогите мне в этом.

Content Script;

      function sendToBackground(eventName, eventData, callback) {
  chrome.runtime.sendMessage({type: eventName, data: eventData},
    function(response) {
      console.log('this is the response from the background page for the ' + eventName + ' Event: ', response);
      if(eventName == 'productDetails') {
        console.log("productDetails yes!");
      }
    })
}

sendToBackground("productDetails", 
    {
      "productDetails": getUKProductDetails()
    });
  })

function getUKProductDetails() {
 let productDetails = [];

 productDetails[0] = "Test";

 return productDetails;
}

Фон JS;

      chrome.runtime.onMessage.addListener(
    function(message, sender, sendResponse) {

        switch(message.type) {
            case "onPopupInit":
              console.log("ran onPopupInit Case in background.js");
              sendResponse(getStorageItem('user'));
              return true;
              break;

            case "login":
                console.log('login logic ran with formData = to', message.data);
                let userLoginCreds = message.data;
                userLoginCreds.username = message.data.email.split('@')[0];
                ajaxCall("POST", "user/login", userLoginCreds, '', function(response){
                   console.log('response from server is: ',response);
                   setStorageItem('user',response);
                   sendResponse(response);
                })
                return true;
                break;

              case "productDetails":
                setStorageItem(message.type, message.data);
                ajaxCall("POST", "product", message.data, getStorageItem('user') ? getStorageItem('user').token : '', function(response){
                  console.log('response from server is: ',response);
                  sendResponse(response);
               })
                sendResponse('all good');
                return true;
              break;
            default:
                console.log('couldnt find matching case');
        }
});

function ajaxCall(type, path, data, token, callback){
  $.ajax({
    url: domain+path,
    type: type,
    data: data,
    headers: {
        token: token
    },
    success: function(response){
      console.log('response: ', response)
      callback(response);
    },
    error: function(response){
      console.log('response: ', response)
      callback(response);
    }
  });
}

function setStorageItem(varName, data){
  console.log('varName: ', varName);
  if(varName!='searchPageData'){
    console.log('data', data);
    window.localStorage.setItem(varName, JSON.stringify(data));
  }
}

function getStorageItem(varName){
  return JSON.parse(localStorage.getItem(varName));
}

Popup JS;

      console.log('popup.js loaded');

let akinbaba = angular.module("akinbaba", ['ui.router']);

akinbaba.config(function($stateProvider, $urlRouterProvider) {
  
  $stateProvider

  .state('home', {
    url: '/home',
    templateUrl: '../views/home.html'
  })

  .state('login', {
    url: '/login',
    templateUrl: '../views/login.html'
  })

  .state('welcome', {
    url: '/welcome',
    templateUrl: '../views/welcome.html'
  })

  $urlRouterProvider.otherwise('login');
})

akinbaba.controller("PopupCtrl", ['$scope', '$state', function($scope, $state) {
console.log('PopupCtrl Initialized');

$scope.onPopupInit = function() {
  console.log('ran $scope.onPopupInit function');
  chrome.runtime.sendMessage({type: "onPopupInit"},
  function(response) {
    console.log("this is the response from the background page for onPopupInit message", response);
    if(response.user) {
      $scope.name = response.user.name;
      $state.go('welcome');
    }
  })
}

$scope.onPopupInit();

$scope.login = function(formData) {
  console.log('formData: ', formData);
  chrome.runtime.sendMessage({type: "login", data: formData},
  function(response) {
    console.log('response from the background is ', response);
    if(response.user) {
      $scope.name = response.user.username;
      $state.go('welcome');
    }
  })
} 
}])

akinbaba.controller("ScraperCtrl", ['$scope', '$state', function($scope, $state) {
  console.log('ScraperCtrl Initialized');
}]);

Серверный JS;

https://hastebin.com/rotovoquzu.js

Маршруты / User.js;

https://hastebin.com/obivebizin.typescript

Промежуточное ПО / auth.js;

https://hastebin.com/ofuxuholal.js

1 ответ

Решение

Шаги:

  1. Найдите пользователя, который вошел в систему или не использует cookie или отправляет запрос на ваш сервер
  2. Пока вы не авторизуете вход пользователя, вы можете отключить значок расширения, используя

chrome.borwserAction.disable() Ссылка: https://developer.chrome.com/docs/extensions/reference/browserAction/#method-disable

  1. Если вы не хотите, чтобы пользователь каким-либо образом предоставлял какие-либо функции. Не загружайте сценарий содержимого с помощью манифеста. Вставить сценарий содержимого из фона, как только найдет авторизованный пользователь. Чтобы внедрить js: chrome.tabs.executeScript() Ссылка: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript Чтобы внедрить css: chrome.tabs. insertcss () Ссылка: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/insertCSS
Другие вопросы по тегам