Vorrei simulare la proprietà della piattaforma Navigator di CasperJS (/ PhantomJS). Ho trovato le soluzioni facili di sovrascrivere l'oggetto del navigatore al caricamento della pagina che viene suggerito in molti altri luoghi sul web:Proprietà del navigatore falso
casper.on('page.initialized', function(){
this.evaluate(function(){
(function(oldNav){
var newNav = {};
[].forEach.call(Object.getOwnPropertyNames(navigator), function(prop){
if (prop === 'platform') {
Object.defineProperty(newNav, prop, {
value: 'Win64'
}); }else {
Object.defineProperty(newNav, prop, {
get: function(){
return oldNav[prop];
}
});
}
});
window.navigator = newNav;
})(window.navigator);
});
});
Ma il problema è che se otteniamo le proprietà Navigator da un Iframe, i valori sono ancora quello originale perché, il page.initialized lo ha impostato solo per la pagina principale. Così ho deciso di cambiarlo nel suo codice sorgente e ricostruirlo. Ho scaricato Phantomjs dal repository git e ho cercato un valore di piattaforma hardcoded (Linux x86_64 per il mio caso). Ho trovato la stringa codificata in ./phantomjs/src/qt/qtwebkit/Source/WebCore/platform/qt/UserAgentQt.cpp
Ho cambiato la stringa che volevo essere restituita come navigator.platform, ma non ha influenzato il navigator.platform. Dove dovrei cambiarlo? È (piattaforma) una stringa harcoded o viene creata dinamicamente?
Vorrei suggerire di modificare casperjs o sovrascrivere alcuni metodi invece di creare una propria versione di PhantomJS. Forse hai più fortuna nel porre la tua domanda nel loro Gruppo Google https://groups.google.com/forum/#!forum/casperjs – CSchulz
Grazie per il tuo commento. L'ho fatto. – Alex
Forse puoi pubblicare la tua soluzione come risposta. – CSchulz