7
$x("//a[contains(@href,'.jpg')]"); 

funziona come previsto dal prompt dei comandi degli strumenti di sviluppo. Ma quando in uno script di contenuto di un'estensione ricevo un '$x is not defined'.

Perché non è disponibile in uno script di contenuto o esiste un modo speciale di accedervi all'interno di un'estensione content-script/Chrome?

Sto utilizzando Chrome 22 su Debian.

+0

Suggerimento: digitare 'debugger;' nella console. –

+0

Bit confuso su quali informazioni extra mi vengono rivelate? – rutherford

+0

Provalo. Avresti visto http://i.stack.imgur.com/AXRPG.png –

risposta

7

$x() non fa parte dell'ambiente di runtime di una pagina Web o di uno script di contenuto. È uno strumento che fa parte di the Command Line API for Chrome's DevTools.

Per utilizzare XPath in uno script di contenuto, è necessario farlo normalmente, la comoda scorciatoia DevTools non è disponibile.

Il codice sarà simile a questa:

var jpgLinks = document.evaluate (
    "//a[contains(@href,'.jpg')]", 
    document, 
    null, 
    XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, 
    null 
); 
var numLinks = jpgLinks.snapshotLength; 

for (var J = 0; J < numLinks; ++J) { 
    var thisLink = jpgLinks.snapshotItem (J); 
    console.log ("Link ", J, " = ", thisLink); 
} 

- che è il tipo di cosa che $x() stava facendo per te, dietro le quinte.


Mentre si è in esso, in considerazione il passaggio a CSS selectors. Poi la stessa funzionalità è:

var jpgLinks = document.querySelectorAll ("a[href$='.jpg']"); 
var numLinks = jpgLinks.length; 

for (var J = 0; J < numLinks; ++J) { 
    var thisLink = jpgLinks[J]; 
    console.log ("Link ", J, " = ", thisLink); 
} 

- che è molto più appetibile nel mio libro.

Problemi correlati