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;
1 ответ
Решение
Шаги:
- Найдите пользователя, который вошел в систему или не использует cookie или отправляет запрос на ваш сервер
- Пока вы не авторизуете вход пользователя, вы можете отключить значок расширения, используя
chrome.borwserAction.disable() Ссылка: https://developer.chrome.com/docs/extensions/reference/browserAction/#method-disable
- Если вы не хотите, чтобы пользователь каким-либо образом предоставлял какие-либо функции. Не загружайте сценарий содержимого с помощью манифеста. Вставить сценарий содержимого из фона, как только найдет авторизованный пользователь. Чтобы внедрить 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