Веб-просмотр продолжает терять фокус
У меня есть приложение, которое в основном является оберткой для внутреннего веб-сайта компании. Идея состоит в том, чтобы легко загрузить веб-сайт в своем собственном окне на моем Chromebook, таким образом, он не будет выгружаться, когда ОЗУ станет низким.
У меня очень простое приложение с одним WebView, которое потребляет все окно приложения. Проблема в том, что всякий раз, когда я переключаюсь от окна и возвращаюсь, веб-просмотр потерял фокус. Это особенно раздражает, потому что это приложение для чата, и я хотел бы начать разговор сразу же после alt-tabbing обратно в окно.
Я просмотрел webview каждый раз, когда окно получает фокус, но разрыв между Window (от chrome.windows) и AppWindow (от chrome.app.window) делает это нетривиальным. Событие, которое мне нужно только для объектов Window, но я могу только окончательно получить текущий AppWindow. Теоретически я могу получить текущее активное окно, когда приложение запускается первым, но это кажется хакерским и ненадежным.
index.html
<!DOCTYPE html>
<html>
<head>
<title>Chat App</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<webview src="https://example.com/" id="chat"></webview>
</body>
</html>
background.js
chrome.app.runtime.onLaunched.addListener(function(launchData) {
chrome.app.window.create(
'index.html',
{
id: 'chat'
}
);
});
styles.css
Употребление веб-обозревателя всего окна было немного сложнее; Я должен был использовать некоторые избыточные свойства CSS, чтобы заставить его работать правильно.
html, body {
margin: 0;
padding: 0;
overflow: hidden;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100%;
}
#chat {
border: 0 none;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100%;
}
Ответы
Ответ 1
Вы можете достичь этого просто с помощью API видимости страницы. Вы можете использовать его, чтобы добавить прослушиватель событий и проверить состояние document.hidden
, чтобы вернуть фокус в поле чата. Вы также можете делать другие вещи, например, воспроизводить звуковое оповещение, когда вы получаете сообщения чата, когда вкладка не отображается.
В этом примере я также добавил слушателя событий в первый ящик для чата, поэтому, если фокус потерян, он пытается получить его снова. Это довольно тяжелый подход, но вы можете настроить свою логику в соответствии с требованиями.
JSFiddle
function handleVisibilityChange() {
console.log(document.hidden);
if (!document.hidden) {
chatFocus();
}
}
function chatFocus() {
document.getElementById("ChatBox1").focus();
}
document.addEventListener("visibilitychange", handleVisibilityChange, false);
document.getElementById("ChatBox1").addEventListener("blur", chatFocus, true);
<input type="text" id="ChatBox1" placeholder="ChatBox1">
<input type="text" id="ChatBox2" placeholder="ChatBox2">