使用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>
答
每个浏览器(和操作系统)都以不同的方式处理这个问题,并且当前不可能使用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();
}
});
的可能的复制后转到默认元素[使用Chrome和Safari扩展突出显示URL栏](https://stackoverflow.com/questions/10492399/highlight-url-bar-using-chrome-and-safari-extension) – Ritz
不。我想用Javascript/jQuery来实现它。浏览器插件不是解决方案 –
这是不可能的。 –