Не могу установить фокус для ввода в расширении Chrome
По какой-то причине я не могу установить фокус на texbox, который есть в моем popup.html. Вот что я пробовал до сих пор:
popup.html:
<input type="text" id="textbox" name="aName" value="" placeholder="blah" />
popup.js:
//Attempt 1
$(function() {
$('#textbox').focus();
});
//Attempt 2
setTimeout(function() { $('#textbox').focus(); }, 1000);
Я также пытался без JavaScript, используя только свойство автофокуса:
<input type="text" id="textbox" name="aName" value="" placeholder="blah" autofocus />
Но ничего из этого не сработало... Есть идеи?
Заметки:
- вызывается popup.js, если я поставлю console.log(), я получаю вывод
- Всплывающее окно запускается значком, который у нас есть рядом с омнибаром (default_icon)
5 ответов
Наконец то, что я использовал, это:
popup.html:
<input type="text" id="textbox" name="aName" value="" placeholder="blah" autofocus />
popup.js:
$(function() {
if (location.search != "?focusHack") location.search = "?focusHack";
});
Спасибо Тарек Эль-Малла и ПАЕЗ!!!
Этот код работает со мной, попробуйте, это обходной путь
<!DOCTYPE >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Sample Extens</title>
</head>
<body style="padding: 0px; margin: 0px;" >
<script type="text/javascript" language="javascript">
if (location.search !== "?foo") {
location.search = "?foo";
throw new Error; // load everything on the next page;
// stop execution on this page
}
</script>
<div id="Def">
<input type="text" id="textbox" name="aName" value="" placeholder="blah" />
<script type="text/javascript" language="javascript">
document.getElementById("textbox").focus();
</script>
</div>
</body>
</html>
У меня была такая же проблема. Я считаю, что смог заставить его работать, установив явный tabindex на входе, как tabindex=1
Пожалуйста, попробуйте и дайте мне знать, если это работает.
Обновить
У меня есть очень простой пример, который работает для меня. Я использую Chrome 19 на Linux.
manifest.js
{
"name": "Auto 'focus'",
"version": "1.0",
"manifest_version": 2,
"description": "An extension to test setting focus",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
}
}
popup.html
<!doctype html>
<html>
<head>
</head>
<body>
<a href="#">Link</a>
<input type="text" id="foo" tabindex="1" />
</body>
</html>
Без tabindex="1"
основное внимание изначально уделяется ссылке. С tabindex="1"
основное внимание уделяется элементу ввода
Метод перезагрузки всплывающего окна в Tarek El-Mallah работает, он просто не работает для вас, так как вы используете manifest_version: 2 и встроенные сценарии не разрешены...
http://code.google.com/chrome/extensions/manifestVersion.html
Кроме того, это известная проблема....
http://code.google.com/p/chromium/issues/detail?id=111660
Ниже приведена версия, которая работает для manifest_version: 2.....
manifest.json
{
"name": "Browser Action PopUp focus/tab test",
"version": "1.0",
"description": "A test to show that on opening a popup you cant set focus and the tab index is not honored on the first select. See, http://stackru.com/questions/9070727/tab-key-not-working-in-popup-in-chrome-extension.",
"browser_action": {
"default_title": "Browser Action PopUp focus/tab test.",
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"manifest_version" :2
}
popup.html
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="popup.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Sample Extens</title>
</head>
<body style="padding: 0px; margin: 0px;" >
<div id="Def">
<input type="text" id="textbox" name="aName" value="" placeholder="blah" />
</div>
</body>
</html>
popup.js
if (location.search !== "?foo") {
location.search = "?foo";
throw new Error; // load everything on the next page;
// stop execution on this page
}
function onLoad() {
document.getElementById("textbox").focus();
}
window.onload = onLoad;
Попробуй это:
autofocus="autofocus"
Вы также можете попробовать это вместо этого:
setTimeout(
function() {
if(location.search !== "?aName") {
location.search = "?aName";
throw new Error;
}
}, 1000);