2017-07-25 35 views
2

期望的行爲:當某個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

這是不可能的。 –

回答

10

每個瀏覽器(和操作系統)都以不同的方式處理這個問題,並且當前不可能使用javascript突出顯示地址欄。即使是這樣,請記住,人們可以以不同的方式映射這些命令(如果它們已經不同)。例如,在mac上,訪問地址欄的命令是Command + L,而不是Ctrl + L

2

根據在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(); 
    } 
}); 
相關問題