Javascript 如何覆盖navigator.getBattery()?

Javascript 如何覆盖navigator.getBattery()?,javascript,google-chrome-extension,navigator,batterylevel,Javascript,Google Chrome Extension,Navigator,Batterylevel,我们正在编写一个chrome扩展,当运行客户端代码的站点出于指纹识别的原因检查电池电量时,它会返回一个随机的电池电量。站点可以使用的示例代码如下所示 navigator.getBattery().then(function(battery) { console.log(battery.level); }); var navigatorBatteryPrivacy = '(' + function() { 'use strict'; var navigator = win

我们正在编写一个chrome扩展,当运行客户端代码的站点出于指纹识别的原因检查电池电量时,它会返回一个随机的电池电量。站点可以使用的示例代码如下所示

navigator.getBattery().then(function(battery) {
    console.log(battery.level);
});
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();
我们无法找到有关如何覆盖
navigator.getBattery()
方法以实现目标的文档。下面可以看到不完整的content-script.js

navigator.getBattery().then(function(battery) {
    console.log(battery.level);
});
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();

我们感谢社区成员的合作。

使用一个内容脚本,在文档中注入一个脚本,从以下代码开始-

Object.defineProperty(navigator, "getBattery", {
    value: () => {/*your custom logic goes here*/}
});
将以下内容添加到清单json中

"content_scripts": [{
    "run_at": "document_start",
    "js": ["contentscript.js"]
}]

您可以简单地替换
navigator.getBattery
,而不是创建新的
navigator
对象

var navigatorBatteryPrivacy = "(" + function() {
    navigator.getBattery = function modifiedGetBattery() {
        return Promise.resolve(new BatteryManager());
    };
} + ")();";

这是一个只读属性,我认为你不能覆盖/欺骗those@LucaKiebel我只是在我的Chrome控制台上重写了它。另外,请确保在
document\u start
上运行您的内容脚本。