为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕森王 2022-03-10 22:08:30
我正在尝试向我们在工作中使用的 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=funciondocument.ready() //didn´t know how to add this to my code其他解决方案包括使用计时器,但我不知道如何应用它。当前的greasemonkey脚本:(function(){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);})();
查看完整描述

3 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

GreaseMonkey 和类似替代方案的默认行为是在加载 DOM(文档对象模型)之后运行用户脚本,即在解析 HTML 但包含的资源完成加载之前。


有些脚本需要在 DOM 加载之前做一些事情。为了实现这一点,他们使用元块条目。这使您有机会在加载时拦截站点正在执行的任何操作。但是,使用此条目,您的脚本在开始运行时对文档一无所知。(请注意 GM 4.0 中的有限支持)@run-atdocument-start


如果您在网站加载之前不需要做任何事情,请使用元条目@run-at document-end或完全忽略此条目。


更准确的方法是实现一个事件监听器。现代浏览器支持该DOMContentLoaded事件,在某些 JS 框架中以前称为“domready”事件。


document.addEventListener('DOMContentLoaded', evt =>

{

  // Do DOM-based stuff here...

  document.addEventListener('keydown', evt =>

  {

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

  });

});

使用 JQuery 速记$(evt => {/* DOM ready stuff */} );也可以。


查看完整回答
反对 回复 2022-03-10
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

Javascript 运行时元素尚未加载,因此未找到具有给定 id 的元素。尝试在您的代码周围包装一个函数:


function loaded(){

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);

}

并确保你有


onload="loaded()"

在body标签中。


查看完整回答
反对 回复 2022-03-10
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

document.getElementById('form1:commandLink1211').click(); 不是你可以做submitForm('form1',1,{source:'form1:commandLink1211'});。它应该做同样的事情,对吧?


查看完整回答
反对 回复 2022-03-10
  • 3 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信