Как мы можем перезаписать navigator.getBattery ()? - PullRequest
0 голосов
/ 22 сентября 2018

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

navigator.getBattery().then(function(battery) {
    console.log(battery.level);
});

Мы не можем найти документацию о том, как метод navigator.getBattery() может быть перезаписан для достижения цели.Неполный файл content-script.js можно увидеть ниже.

var navigatorBatteryPrivacy = '(' + function() {
    'use strict';
    var navigator = window.navigator;
    var modifiedNavigator;
    if (Navigator.prototype) {


        modifiedNavigator = Navigator.prototype;

    } else {

        modifiedNavigator = Object.create(navigator);
        Object.defineProperty(window, 'navigator', {
            value: modifiedNavigator,
            configurable: false,
            enumerable: false,
            writable: false
        });
    }


    modifiedNavigator.getBattery = function modifiedGetBattery() {
        return Promise.resolve(new BatteryManager());
    };




} + ')();';

var s = document.createElement('script');
s.textContent = navigatorBatteryPrivacy;
document.documentElement.appendChild(s);
s.remove();

Мы ценим сотрудничество членов сообщества.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Вместо создания нового navigator объекта вы можете просто заменить navigator.getBattery.

var navigatorBatteryPrivacy = "(" + function() {
    navigator.getBattery = function modifiedGetBattery() {
        return Promise.resolve(new BatteryManager());
    };
} + ")();";
0 голосов
/ 22 сентября 2018

Используйте скрипт содержимого, который внедряет скрипт в document_start со следующим кодом -

Object.defineProperty(navigator, "getBattery", {
    value: () => {/*your custom logic goes here*/}
});

Добавьте следующее в манифест json.

"content_scripts": [{
    "run_at": "document_start",
    "js": ["contentscript.js"]
}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...