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

时间:2013-08-25 18:07:55

标签: javascript google-chrome xpath google-chrome-extension content-script

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

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

为什么内容脚本中没有此功能,或者在内容脚本/ Chrome扩展程序中是否有特殊的方式来访问它?

我在Debian上使用Chrome 22。

2 个答案:

答案 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