使用javascript/jquery将我的网页焦点放在浏览器地址栏中

问题描述:

期望的行为:当某个Tabkey按钮发生在网页中的某个特定dom元素上时我希望我的光标焦点转到地址栏。 (我希望通过Javascript使用任何浏览器扩展名并非此处所需)使用javascript/jquery将我的网页焦点放在浏览器地址栏中

当您在网页中按Control + L快捷键时,需要将焦点放在地址栏上。 但是,当我试图通过JavaScript触发这个它不工作。

<div id="1" tabindex="1"></div> 
<div id="2" tabindex="1"></div> 
<div id="3" tabindex="1"></div> 
<script> 
    var some = $('#1'); 
    some.on('keydown', function (e) { 
     if (e.keyCode == 9 /* TabKey */) { 
      var e = jQuery.Event("keydown"); 
      e.keyCode = 76 /* LKey */; 
      e.ctrlKey = true; 
      $('body').trigger(e); 

     } 
    }); 
</script> 
+3

的可能的复制后转到默认元素[使用Chrome和Safari扩展突出显示URL栏](https://stackoverflow.com/questions/10492399/highlight-url-bar-using-chrome-and-safari-extension) – Ritz

+1

不。我想用Javascript/jQuery来实现它。浏览器插件不是解决方案 –

+2

这是不可能的。 –

每个浏览器(和操作系统)都以不同的方式处理这个问题,并且当前不可能使用javascript突出显示地址栏。即使是这样,请记住,人们可以以不同的方式映射这些命令(如果它们已经不同)。例如,在mac上,访问地址栏的命令是Command + L,而不是Ctrl + L

根据在UI事件规范Trusted events由用户代理产生的

活动,无论是作为用户交互的结果,或者作为改变到DOM的直接结果,由受信任的具有通过createEvent()方法由脚本生成的事件,使用initEvent()方法修改或通过dispatchEvent()方法调度的事件不具有权限的用户代理。受信任事件的isTrusted属性的值为true,而不受信任事件的isTrusted属性值为false。

因此触发CTRL+L事件将会对你的浏览器没有任何影响,这将需要一个值得信赖的事件为打开地址栏。

是的,正如一些人已经说过的那样,删除默认浏览器行为无助于访问。


从纯粹的技术角度来看,jQuery UI为您提供了一种非常快速的方式来回答评论中的用例。这将移动到“的keydown”最后的聚焦元素,然后当你复发tab键,将您的页面(地址栏,这取决于你的浏览器)

$("#MyLastElement").on('keydown', function (e) { 
    if((e.keyCode==9)&&(!e.shiftKey)) { 
    $(":tabbable").last().focus(); 
    } 
});