【发布时间】:2014-06-05 19:08:21
【问题描述】:
我正在尝试使用简单的 chrome 扩展来重载 navigator.userAgent。由于内容脚本在隔离环境中运行,我尝试创建一个脚本元素并将逻辑写入此元素。这发生在扩展的背景页面
chrome.tabs.query({
active:!0
}, function(tabs) {
var x = "window.navigator.__defineGetter__('userAgent', function() {" +
"return 'Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D)" +
" AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile " +
"Safari/535.19'; });console.log(navigator.userAgent);";
for (var i = 0;i < tabs.length;i++) {
var code = 'var s = document.createElement("script"); s.text = "' + x +
'"; document.head.insertBefore(s, document.head.firstChild);' +
'navigator.userAgent ="s"; console.log(navigator.userAgent);';
// Inject into the tabs of choice - currently everything.
chrome.tabs.executeScript(tabs[i].id, {
code: code
});
}
});
脚本为 head 元素附加,我可以看到 UA 字符串是通过在 chrome 控制台中尝试 navigator.userAgent 来欺骗的字符串,因此我认为 navigator 对象已重载。
但这似乎不是有效的方法,或者根本没有发生,因为导航器对象没有更新,我通过 http://www.quirksmode.org/js/detect.html 发现它仍然显示 Mac 的 UA。
那么,我到底错过了什么?
【问题讨论】:
标签: javascript html google-chrome google-chrome-extension