2011-10-16 11 views
30

Durante il debug di un'app client che utilizza un back-end Google, ho aggiunto alcune versioni di debug delle funzioni e le ho inserite utilizzando l'editor di script di Chrome Developer Tools.Sostituisci il file JavaScript remoto con una copia di debug locale utilizzando Greasemonkey o userscript

Tuttavia ci sono un certo numero di limitazioni con questo approccio, in primo luogo è che l'editor non sembra funzionare sempre con i file de-minified, e quando il file JS è lungo 35K linee, questo è un problema.

Un altro problema è che tutta l'inizializzazione eseguita durante il caricamento, utilizza le funzioni originali "non patch", quindi non è l'ideale.

Desidero sostituire il file javascript.js remoto con la mia copia locale, presumibilmente usando alcune espressioni regolari sul nome del file, o qualunque sia la strategia adatta, sono felice di utilizzare Firefox o Chrome, se uno era più facile del altro.

+0

Duplicato di [Sostituisci la versione jQuery di una pagina con Greasemonkey] (http://stackoverflow.com/questions/7700728/replace-jquery-version-of-a-page-with-greasemonkey) - che mostra come sostituire JS remoto con una versione locale. –

+1

@Brock Adams quella soluzione è specifica per Windows e non funzionerà su un sistema Unix-y. Non so se questo è importante per OP, ma sarebbe bello se qualcuno avesse una soluzione universale. –

+0

@Daniel Mendel, ci sono 2 soluzioni lì. Probabilmente uno funzionerà per l'OP come probabilità: è su Windows. L'altra soluzione non è limitata a Windows, ma spiega anche le limitazioni che provano a farlo con un userscript, o con la faccia di Greasemon (anche se la risposta potrebbe funzionare meglio quando viene portata su Chrome - qualcosa che non ho testato visto che uso solo Chrome con parsimonia). –

risposta

19

Quindi, come identificato da @BrockAdams, ci sono un paio di soluzioni a questi tipi di problemi a seconda dei requisiti e seguono entrambi i metodi 1 di 2.

  1. il browser API switcharoo.
  2. Il befiddlement di intercettazione basato su proxy.

il browser API switcharoo. Sia firefox che chrome supportano le estensioni del browser che possono sfruttare le API specifiche della piattaforma per registrare i gestori di eventi per "onbeforeload" o "onBeforeRequest" rispettivamente in firefox e chrome. Le API di Chrome sono attualmente sperimentali, quindi è probabile che questi strumenti siano meglio sviluppati con firefox. 2 strumenti che sicuramente fanno qualcosa di simile a ciò che è richiesto sono AdBlock plus e Jsdeminifier entrambi i quali hanno il codice sorgente disponibile.

Il punto chiave per queste 2 applicazioni Firefox è che intercettano richiesta Web prima il browser ottiene le mani su di esso e operare sul lato opposto della http/https fase codice cliccando, quindi può vedere la risposta decifrato, tuttavia, come identificato in the other post, non fanno il tutto, anche se il jsdeminifier è stato molto utile, non ho trovato un plugin firefox per fare esattamente quello che volevo, ma posso vedere da quei plug-in precedenti che è possibile con entrambi firefox e chrome. Sebbene in realtà non facciano il trucco come richiesto.

Il proxy intercettazione basato befiddlement Questo è sicuramente l'opzione migliore in un ambiente HTTP semplice, ci sono tutta una serie di deleghe, come pivoxy, fiddler2, Charles proxy Web HTTP, e presumibilmente alcuni che non mi guardo specificamente come snort che supporta il filtraggio di qualche tipo.

La soluzione più semplice per me era foxyproxy e privoxy su firefox e configurare user.action e user.filter per rilevare l'url della pagina e quindi applicare un filtro che sostituiva il tag src originale, per il mio possedere uno.

Il caso https. proxy vs plug-in Quando la richiesta è https, il proxy non può vedere l'url della richiesta o il corpo della risposta, quindi non può fare la roba interessante di scambio. Tuttavia, c'è un'opzione disponibile per coloro che amano pasticciare con il loro browser. E questo è il proxy SSL man-in-the-middle.Il Charles Web HTTP proxy sembra essere la soluzione principale a questo problema. Fondamentalmente il modo in cui funziona è che quando il tuo browser effettua una richiesta al server HTTPS remoto, il proxy ssl intercetta la richiesta e dall'indirizzo ip del server genera un certificato del server al volo, che firma con la propria CA radice, e rimanda al browser. Il browser ovviamente si lamenta del certificato autofirmato, ma qui puoi scegliere di installare il cert CA proxy ssl root nel browser, confondendo il browser e consentendo al proxy ssl di gestire l'utente nel mezzo e apportare sostituzioni e filtri alla risposta non elaborata corpo.

rotolo alternativa proprio interno Chrome ho deciso di andare con la rotazione mia estensione Chrome, che sto progettando di mettere a disposizione. Attualmente è in uno stato molto codificato ai miei requisiti, ma funziona piuttosto bene, anche per le richieste https e un altro vantaggio è che una soluzione plug-in del browser può essere più strettamente integrata con gli strumenti di sviluppo del browser.

+0

Sono anche molto interessato a sviluppare una soluzione del genere (estensione FF o Chrome). Pensi che sarebbe possibile vedere il tuo plugin o capire l'approccio? –

+0

L'estensione FF si trova nella parte inferiore della pagina dei download di Charles http://www.charlesproxy.com/download/ –

10

C'è uno strumento in più Requestly - Chrome Extension che può essere utilizzato per riscrivere gli URL e sostituire le librerie di produzione con le librerie ospitate locali con un'impostazione molto semplice e un'interfaccia molto intuitiva.

Date un'occhiata a questo:

enter image description here

PS: So che questo è stato risposto, ma ho ancora risposto a questa considerazione sarà molto utile per futuri lettori.

+1

Strumento eccezionale. Grazie! – advncd

+0

Richiesto è disponibile anche per Firefox. Scarica da qui: http://www.requestly.in/ – sachinjain024

Problemi correlati