Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 滑腻鬼_Javascript_Greasemonkey - Fatal编程技术网

Javascript 滑腻鬼

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

我正试图用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");
}
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函数。我做错了什么?