我们正在编写一个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();
我们感谢社区成员的合作。
答案 0 :(得分:0)
使用内容脚本,该脚本将使用以下代码在document_start处注入脚本-
Object.defineProperty(navigator, "getBattery", {
value: () => {/*your custom logic goes here*/}
});
将以下内容添加到清单json。
"content_scripts": [{
"run_at": "document_start",
"js": ["contentscript.js"]
}]
答案 1 :(得分:0)
您不必替换新的navigator
对象,而只需替换navigator.getBattery
。
var navigatorBatteryPrivacy = "(" + function() {
navigator.getBattery = function modifiedGetBattery() {
return Promise.resolve(new BatteryManager());
};
} + ")();";