【发布时间】:2016-11-05 00:26:06
【问题描述】:
我正在编写一个简单的 Chrome 扩展程序,试图欺骗您当前的用户代理。我刚刚发现了this question 并在我的代码中实现了它。
以下是尝试替换当前用户代理字符串的内容脚本,设置为在document_start 运行:
let useragent, actualCode, timer = null;
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.useragent) {
sendResponse({error: false});
useragent = request.useragent;
}
else sendResponse({error: true});
});
var receivedUA = function() {
if (useragent != null) {
window.clearInterval(timer);
actualCode = function(userAgent) {
console.log('im being called');
'use strict';
let navigator = window.navigator;
let modifiedNavigator;
if ('userAgent' in Navigator.prototype) {
modifiedNavigator = Navigator.prototype;
} else {
modifiedNavigator = Object.create(navigator);
Object.defineProperty(window, 'navigator', {
value: modifiedNavigator,
configurable: false,
enumerable: false,
writable: false
});
Object.defineProperty(navigator, 'navigator', {
value: modifiedNavigator,
configurable: false,
enumerable: false,
writable: false
});
}
Object.defineProperties(modifiedNavigator, {
userAgent: {
value: userAgent.useragent,
configurable: false,
enumerable: true,
writable: false
},
appVersion: {
value: userAgent.appversion,
configurable: false,
enumerable: true,
writable: false
},
platform: {
value: userAgent.platform,
configurable: false,
enumerable: true,
writable: false
}
});
console.dir(modifiedNavigator);
};
let evt = new Event('reset');
document.documentElement.addEventListener('reset', actualCode(useragent));
document.documentElement.dispatchEvent(evt);
document.documentElement.removeEventListener('reset', actualCode(useragent));
}
else {
window.clearTimeout(timer);
timer = window.setTimeout(receivedUA, 100);
}
}
receivedUA();
但是,我在 whatsmyua.com 上进行测试,并且在文档开始加载时调用代码,但在加载之后,它会显示我真正的用户代理,并且在控制台上键入 window.navigator.userAgent 会返回相同的结果。我在这里错过了什么?
【问题讨论】:
标签: javascript google-chrome-extension