2014-01-23 39 views
0

这是一个跟进到this question.如何捕捉用户用JavaScript点击的* ANY *元素?

这个想法是让用户通过JavaScript在Firefox浏览器中单击的位置。 从命名的问题开始,以下的JavaScript代码几乎做的:

var DocElements = document.getElementsByTagName('*');for(var i = 0; i < DocElements.length; i++){DocElements[i].onclick = function clicked(MyElement){var target = (MyElement.target) ? MyElement.target : MyElement.srcElement;var e = document.createElement('a'); e.setAttribute('id','myUniqueID'); e.setAttribute('value', this); target.appendChild(e);};} 

该脚本将ID为“myUniqueID”中的任何元素点击,则该脚本可以检索通过执行点击的文档的子以下蟒蛇代码:

resultss=browser.driver.find_element_by_id("myUniqueID") #This uses selenium driver engine. 
resultss.find_element_by_xpath("..") #This gets the parent node of selected one 

JS代码的目的是挑选任何元素点击网站上,通过追加本身在HTML代码中的所有项目:

document.getElementsByTagName('*') 

但是这个脚本失败了,因为它无法选取所有的元素。例如,如果您点击月/性别表格in google signup page,然后选择一个月,它将选择代表所选月份的元素,但不会检测到第一次点击the form。因此,getElementsByTagName('*')不会选取网站中的所有元素。

Javascript如何附加运行全部文档中的元素无例外吗?

+0

第一个链接是错误的。 –

+0

道歉,现在工作。 –

回答

0

我聘请了一位自由职业者来完成脚本。我非常接近,但是由于即时通讯在JavaScript中是全新的,所以我花了很长时间才弄明白。我需要使用'onmousedown'而不是'onclick'作为事件。由此产生的脚本如下:

var DocElements = document.getElementsByTagName('*');for(var i = 0; i < DocElements.length; i++){DocElements[i].onmousedown = function clicked(MyElement){var target = (MyElement.target) ? MyElement.target : MyElement.srcElement;var e = document.createElement('a'); e.setAttribute('id','myUniqueID'); e.setAttribute('value', this); target.appendChild(e);};} 

我希望这对未来的其他人有用。