- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在greasemonkey 脚本中修改gmail。使用 xpather 我可以获得我想要隐藏的部分的 xpath 表达式。但使用以下代码片段我无法获得匹配。警报函数永远不会被调用。谁能指出我做错了什么?
var allLinks, thisLink;
allLinks = document.evaluate(
"//html/body/div[1]/div/div/div[1]/div/div[3]/div[1]/div[2]/div[2]/div[1]/div[1]",
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
for (var i = 0; i < allLinks.snapshotLength; i++) {
thisLink = allLinks.snapshotItem(i);
alert("found");
}
@艾伦·斯托姆
我安装了firebug,使用控制台测试了脚本,它可以工作,但我仍然无法让它在greasemonkey下工作。 Greasemonkey 仍然没有给我一个警报框。我还尝试添加加载事件监听器,但也没有帮助。
最佳答案
首先是一般调试技巧,然后是解决您的问题。
请记住,Greasemonkey 脚本只是 javascript,您仍然可以使用所有可用的 Javascript 工具来调试问题。打开gmail,启动Firebug ,然后尝试直接在命令行上运行 JavaScript 代码(单击控制台行右侧的向上圆圈箭头以获得更大的输入区域)。
当我使用您的 JavaScript 代码片段执行上述操作时,allLinks.snapshotLength 的计算结果为 0,表明您的 xpath 表达式与任何内容都不匹配。这很奇怪,因为当我使用 XPath Checker 时,它与 Logo 相匹配。
再深入一点,看起来 gmail 的主文档是许多 iframe,而 iframe 包含实际的应用程序元素。具体来说,有一个 ID 为“canvas_frame”的框架,其中包含应用程序界面的实际 DOM。当我尝试时
canvas = window.frames[document.getElementById('canvas_frame').name].document;
allLinks = canvas.evaluate(
"//html/body/div[1]/div/div/div[1]/div/div[3]/div[1]/div[2]/div[2]/div[1]/div[1]",
canvas,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
我收到的响应长度为1,这可能更适合您的需求。
最后,这不是必需的,但您的 xPath 表达式看起来有点脆弱。如果 gmail 稍微改变文档结构(例如,使用包装 div),您的程序就会崩溃。考虑这样的事情。
<!--
all divs on the page that contains an h1 element
that contains the text "Gmail Logo"
-->
//div[contains(./h1,"Gmail Logo")]
关于javascript - xpath 油猴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/762844/
我是一名优秀的程序员,十分优秀!