2016-08-06 101 views
1

Wie kann ich den Wert von navigator.platform in Chrome, Firefox oder Internet Explorer (vorzugsweise Chrome) manipulieren? Es sieht so aus, als wäre es früher in Firefox möglich, aber die Unterstützung wurde dafür weggelassen.Ändern Sie navigator.platform in Chrome, Firefox oder IE, um den BS-Erkennungscode zu testen

Dies ist zum Testen von Code auf einer Website, die in einer bedingten JavaScript-Überprüfung ausgeführt wird, die die navigator.platform-Eigenschaft testet. Leider wird userAgent nicht getestet, was leicht zu ändern wäre.

Ich habe versucht, eine einfache Chrom-Erweiterung pro Vorschlag in der zweiten Post auf https://groups.google.com/a/chromium.org/forum/#!topic/chromium-discuss/8cCllrVX4kI schreiben, aber es funktioniert nicht (ich habe den Code, den ich unten versucht). Wenn ich console.log (navigator.platform) in der Erweiterung mache, druckt es "MacIntel" wie gewünscht aus, aber wenn ich navigator.platform in der Konsole nach dem Laden der Seite schreibe, sagt es "Win32" (dh das eigentliche Betriebssystem, das ich bin will es nicht sagen).

//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

Variablen/Objekte/Funktionen in Content-Skripte werden von der Webseite getrennt, so dass Sie ein DOM Skriptelement injizieren müssen: [eine Chrome-Erweiterung Gebäuden - Inject-Code in einer Seite einen Content-Skript] (https://stackoverflow.com/q/9515704) – wOxxOm

+0

@wOxxOm Danke - Ich folgte Ihrem Vorschlag und es funktioniert. Ich habe den vollständigen Code als Antwort gepostet. – g491

Antwort

2

Kredit @wOxxOm und https://stackoverflow.com/a/9517879/4811197 - ich den navigator_change.js Code in der Frage zu folgendem aktualisiert und es funktioniert.

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

schlagen Sie vor, eine Erweiterung zu machen? – Toolkit

+0

@ Toolkit Ja, das ist Erweiterungscode – g491