現在のユーザーエージェントを偽装しようとする単純な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
と入力すると同じ結果が返されます。私はここで何が欠けていますか?
あなたの提案は 'window.navigator'には影響しないので、特にうまくいかなかった理由を説明していると思います。 –
私はすでにこの部分を自分のコードで使用しています。私は大部分のウェブサイトが 'window.navigator'を利用してHTTPヘッダの代わりにユーザエージェントを検索していると思います。 – Alexandre
それで、上書きされないようにするためにできることはありますか? – Alexandre