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

funktioniert wie erwartet von der Eingabeaufforderung der Entwickler-Tools. Aber wenn ich im Content-Skript einer Erweiterung bin, bekomme ich eine '$x is not defined'.

Warum ist dies nicht in einem Content-Skript verfügbar oder gibt es eine spezielle Möglichkeit, darauf innerhalb einer Content-Script/Chrome-Erweiterung zuzugreifen?

Ich verwende Chrome 22 auf Debian.

+0

Tipp: Geben Sie 'debugger;' in die Konsole ein. –

+0

Etwas verwirrt, was für zusätzliche Informationen, die mir offenbaren? – rutherford

+0

Probieren Sie es einfach aus. Sie hätten http://i.stack.imgur.com/AXRPG.png –

Antwort

7

$x() ist nicht Teil der Laufzeitumgebung einer Webseite oder eines Inhaltsskripts. Es ist ein Werkzeug, das Teil von the Command Line API for Chrome's DevTools ist.

Um XPath in einem Inhaltsskript zu verwenden, müssen Sie es auf die normale Weise tun, die DevTools-bequeme Verknüpfung ist nicht verfügbar.

Ihr Code würde wie folgt aussehen:

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); 
} 

- was die Art der Sache ist, dass $x() für Sie tat, hinter den Kulissen.


Während Sie gerade dabei sind, sollten Sie auf CSS selectors umstellen. Dann ist die gleiche Funktionalität:

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); 
} 

- das ist viel schmackhafter in meinem Buch.

Verwandte Themen