$x("//a[contains(@href,'.jpg')]");
从开发人员工具命令提示符开始按预期工作。但是,当在扩展程序的内容脚本中,我得到一个“$x is not defined
”。
为什么内容脚本中没有此功能,或者在内容脚本/ Chrome扩展程序中是否有特殊的方式来访问它?
我在Debian上使用Chrome 22。
答案 0 :(得分:7)
$x()
不属于网页或内容脚本的运行时环境。它是the Command Line API for Chrome's DevTools的一部分工具。
要在内容脚本中使用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);
}
- 这是$x()
在幕后为你做的事情。
当您在此时,请考虑切换到CSS selectors。然后相同的功能是:
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);
}
- 这在我的书中更加可口。
答案 1 :(得分:0)
我建议将此功能添加到您的代码中
var xpath = function (xpathToExecute) {
var result = [];
var nodesSnapshot = document.evaluate(xpathToExecute, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = 0; i < nodesSnapshot.snapshotLength; i++) {
result.push(nodesSnapshot.snapshotItem(i));
}
return result;
}
并只用它代替$ x