【问题标题】:Adding keylistener and using Javascript to click a link in Greasemonkey添加 keylistener 并使用 Javascript 单击 Greasemonkey 中的链接
【发布时间】:2020-12-17 03:09:23
【问题描述】:

我想创建一个 greasymonkey 脚本,它将为一个邮件站点中的注销操作添加一个快捷键。

当前注销链接 "?logout&hl=en" 具有 id=":r5"。我能够获取链接的节点,但无法调用点击它。

我尝试了如下脚本:

function key_event(event){
    GM_log("Hello");
    GM_log(event.keyCode);
    //if(event.keyCode != 112) return;
    e=document.getElementById(':r5');
    if(!e) {return;}
    var evObj = document.createEvent('MouseEvents');
    evObj.initMouseEvent(('click'),true,true,window,0,0,0,0,0,false,false,false,false,0,null);
    GM_log(e);
    e.dispatchEvent(evObj);
}

document.addEventListener("keypress", key_event, true);

但这不起作用。您认为这里有什么问题?

【问题讨论】:

    标签: javascript hyperlink dom-events greasemonkey


    【解决方案1】:

    我认为您无法单击脚本中的链接。您应该尝试重定向到链接位置:

    .....
    e=document.getElementById(':r5'); 
    document.location.href = e.href;
    .....
    

    【讨论】:

      【解决方案2】:

      这是 Mozilla 浏览器的错误或安全“功能”(开发人员尚未决定)。请参阅:"simulating a click on an anchor using dispatchEvent and initMouseEvent does not trigger a real click"

      所以你不能以这种方式触发链接(目前)。

      如果是普通链接使用:

      var sTargetURL  = document.getElementById(':r5').href;
      window.location.href = sTargetURL;
      

      .
      如果是 JavaScript 调用,EG <a id=":r5" href="SomeFunc()">foo</a> 使用:

      unsafeWindow.SomeFunc();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-01
        相关资源
        最近更新 更多