添加 keyListener 来模拟鼠标点击链接,页面是用 Javax jspx servlet

我正在尝试向我们在工作中使用的 Web 应用程序添加热键。解决方案是应用 Greasemonkey 脚本,但 Web 系统使用 Liferay Portal,它是由 JavaX 和 jspx 服务器小程序制成的。


我不知道如何应用“WAITFORKEYELEMENTS”答案,我的知识并不那么先进。


问题是什么?我需要在标签中搜索链接,即“案例文件历史记录”,添加一个 keylistener 事件并模拟鼠标单击。这是一个示例链接:


<a id="form1:commandLink1211" name="form1:commandLink1211" 

onclick="submitForm('form1',1,{source:'form1:commandLink1211'});

return false;" 

class="linkMenu" href="#">

Look case file history

</a>

我需要它来模拟鼠标单击此链接,但 getElementById 返回 null。该页面加载“空”,然后加载 jspx 模块。我知道greasemonkey 把脚本放在第一位。我试着用


window.onload=funcion

document.ready() //didn´t know how to add this to my code

其他解决方案包括使用计时器,但我不知道如何应用它。


当前的greasemonkey脚本:


(function(){

document.addEventListener('keydown', function(e) {

// pressed alt+g

if (e.keyCode == 71 && !e.shiftKey && !e.ctrlKey && e.altKey && !e.metaKey)

{

console.log ("key pressed");

document.getElementById('form1:commandLink1211').click();

}

}, false);

})();


慕森王
浏览 135回答 3
3回答

侃侃无极

GreaseMonkey 和类似替代方案的默认行为是在加载 DOM(文档对象模型)之后运行用户脚本,即在解析 HTML 但包含的资源完成加载之前。有些脚本需要在 DOM 加载之前做一些事情。为了实现这一点,他们使用元块条目。这使您有机会在加载时拦截站点正在执行的任何操作。但是,使用此条目,您的脚本在开始运行时对文档一无所知。(请注意 GM 4.0 中的有限支持)@run-atdocument-start如果您在网站加载之前不需要做任何事情,请使用元条目@run-at document-end或完全忽略此条目。更准确的方法是实现一个事件监听器。现代浏览器支持该DOMContentLoaded事件,在某些 JS 框架中以前称为“domready”事件。document.addEventListener('DOMContentLoaded', evt =>{&nbsp; // Do DOM-based stuff here...&nbsp; document.addEventListener('keydown', evt =>&nbsp; {&nbsp; &nbsp; document.getElementById('form1:commandLink1211').click();&nbsp; });});使用 JQuery 速记$(evt => {/* DOM ready stuff */} );也可以。

慕盖茨4494581

Javascript 运行时元素尚未加载,因此未找到具有给定 id 的元素。尝试在您的代码周围包装一个函数:function loaded(){document.addEventListener('keydown', function(e) {// pressed alt+gif (e.keyCode == 71 && !e.shiftKey && !e.ctrlKey && e.altKey && !e.metaKey){console.log ("key pressed");document.getElementById('form1:commandLink1211').click();}}, false);}并确保你有onload="loaded()"在body标签中。

慕妹3146593

而document.getElementById('form1:commandLink1211').click();&nbsp;不是你可以做submitForm('form1',1,{source:'form1:commandLink1211'});。它应该做同样的事情,对吧?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java