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

2024-01-09

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

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

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

我在 Debian 上使用 Chrome 22。


$x()不是网页或内容脚本的运行时环境的一部分。它是一个工具,是Chrome 开发者工具的命令行 API https://developers.google.com/chrome-developer-tools/docs/commandline-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);
}

——就是这样的事情$x()是在幕后为你做的。


当你这样做时,考虑切换到CSS 选择器 http://www.w3.org/TR/CSS2/selector.html。那么相同的功能是:

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

——这在我的书中更令人愉快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

$x() 函数未在 Chrome 扩展、内容脚本中定义 的相关文章

随机推荐