2016-08-06 58 views
1

如何可以欺騙navigator.platform對瀏覽器,Firefox或Internet Explorer(優選鍍鉻)的值?看起來它本來可以在Firefox上使用,但是這種支持已經被刪除了。更改navigator.platform測試OS檢測碼

這是測試在它運行在有條件的JavaScript支票測試navigator.platform財產網站一些代碼。不幸的是,它沒有測試userAgent,這很容易改變。

我試着寫在https://groups.google.com/a/chromium.org/forum/#!topic/chromium-discuss/8cCllrVX4kI第二後每建議一個簡單的Chrome擴展,但它不工作(我包括我試過下面的代碼)。如果我在擴展中使用console.log(navigator.platform),它會根據需要打印出「MacIntel」,但如果在頁面加載後在控制檯中鍵入navigator.platform,它會顯示「Win32」(即我的實際操作系統不想說)。

//navigator_change.js 
Object.defineProperty(navigator,"platform", { 
    get: function() { return "MacIntel"; }, 
    set: function (a) {} 
}); 

//manifest.json 
{ 
    "manifest_version": 2, 
    "content_scripts": [ { 
     "js":  [ "navigator_change.js" ], 
     "matches": [ "<all_urls>"], 
     "run_at": "document_start" 
    } ], 
    "converted_from_user_script": true, 
    "description": "Fake navigator.platform", 
    "name":   "MacFaker", 
    "version":  "1" 
} 
+0

變量/內容腳本對象/功能從網頁中分離,所以你需要注入DOM腳本元素:構建一個Chrome擴展 - 使用內容腳本在頁面注入代碼(HTTPS:/ /stackoverflow.com/q/9515704) – wOxxOm

+0

@wOxxOm謝謝 - 我遵循你的建議,它的工作原理。我發佈了完整的代碼作爲答案。 – g491

回答

2

信用@wOxxOm和https://stackoverflow.com/a/9517879/4811197 - 我的問題navigator_change.js代碼更新到以下和它的作品。

var codeToInject = 'Object.defineProperty(navigator,"platform", { \ 
    get: function() { return "MacIntel"; }, \ 
    set: function (a) {} \ 
});'; 
var script = document.createElement('script'); 
script.appendChild(document.createTextNode(codeToInject)); 
(document.head || document.documentElement).appendChild(script); 
script.parentNode.removeChild(script); 
+0

你是否建議做一個擴展? – Toolkit

+0

@Toolkit是的這是擴展代碼 – g491