Javascript 滑腻鬼
我正试图用greasemonkey脚本修改gmail。使用xpather,我可以得到我试图隐藏的部分的xpath表达式。但使用下面的代码片段,我无法找到匹配项。从不调用警报函数。谁能告诉我我做错了什么Javascript 滑腻鬼,javascript,greasemonkey,Javascript,Greasemonkey,我正试图用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]", do
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");
}
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);
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]”,
文件,
无效的
XPathResult.UNORDERED\节点\快照\类型,
无效);
对于(var i=0;i
@艾伦·斯托姆
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);
我安装了firebug,并使用控制台对脚本进行了测试,它可以正常工作,但仍然无法在greasemonkey下工作。Greasemonkey仍然没有给我一个警告框。我还尝试添加了一个加载事件监听器,但也没有任何帮助。首先是一个常规调试技巧,然后是针对您的问题的尝试
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);
记住Greasemonkey脚本只是javascript,您仍然可以使用所有可用的javascript工具来调试您的问题。打开gmail,启动,并尝试直接在命令行上运行javascript代码(单击控制台行右侧的向上圆圈箭头以获得更大的键入区域)
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);
当我对您的javascript代码段执行上述操作时,allLinks.snapshotLength的计算结果为0,这表明您的xpath表达式与任何内容都不匹配。这很奇怪,因为当我使用时,它与徽标匹配
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);
再深入一点,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,这可能更适合您的需要
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);
最后,这不是必需的,但是xPath表达式看起来有点脆弱。如果gmail稍微改变文档结构(比如使用包装器div),你的程序就会崩溃。考虑这样的事情。
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);
<!--
all divs on the page that contains an h1 element
that contains the text "Gmail Logo"
-->
//div[contains(./h1,"Gmail Logo")]
//div[包含(./h1,“Gmail徽标”)]
@Hamza,听起来您遇到的不仅仅是xpath问题。如果您发布了整个greasemonkey脚本,其他人可能会提供帮助;if(画布)警报(“获取画布”);我没有收到警报。如果我运行var canvas=document.getElementById('canvas_frame');if(画布)警报(“获取画布”);我确实收到了警报,但canvas没有evaluate函数。我做错了什么?