$ x()函数未在Chrome扩展程序内容脚本中定义

rut*_*ord 9 javascript xpath google-chrome google-chrome-extension content-script

$x("//a[contains(@href,'.jpg')]");
Run Code Online (Sandbox Code Playgroud)

从开发人员工具命令提示符按预期工作.但是,当在扩展程序的内容脚本中,我得到一个' $x is not defined'.

为什么这在内容脚本中不可用,或者是否有特殊的方式在内容脚本/ Chrome扩展程序中访问它?

我在Debian上使用Chrome 22.

Bro*_*ams 10

$x()不属于网页或内容脚本的运行时环境.它是Chrome的DevTools命令行API的一部分.

要在内容脚本中使用XPath,您需要以正常方式执行,DevTools方便的快捷方式不可用.

您的代码如下所示:

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);
}
Run Code Online (Sandbox Code Playgroud)

- $x()在幕后,这是为你做的事情.


在此期间,请考虑切换到CSS选择器.然后相同的功能是:

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);
}
Run Code Online (Sandbox Code Playgroud)

- 这在我的书中更加可口.