2016-01-02 2 views
0

Я пытаюсь написать «Приложение для Chrome» (не расширение Chrome, но приложение, которое, например, может работать в режиме киоска), которое в основном открывает только полноэкранный браузер, который отображает веб-страницу.Страница параметров для Chrome-упакованного приложения для режима киоска

Это приложение нуждается в некоторой информации о конфигурации, например. URL-адрес этой веб-страницы должен быть установлен администратором.

Я бы ожидал, что это решит, указав страницу параметров. Но, похоже, это невозможно, специально: ср. например How do I handle options in a packaged Chrome App?.
Решения, описанное здесь не работает для меня по двум причинам:

  • контекстного меню/правая кнопка мыши уже используются на моей веб-странице (она фактически отключена с целью предотвращение ошибок)
  • Только администратор должен иметь возможность изменять настройки (подумайте об окружающей среде в гостинице)

Как я могу достичь этой цели?

Я не могу ничего сделать, поскольку администратор, скорее всего, не специалист по ИТ. Он получит HowTo с простыми шагами по настройке устройства, вот и все. Вся основная информация о конфигурации/настройке будет поступать с центрального сервера, но сначала должен быть настроен URL-адрес этого сервера ...

ответ

0

Возможно, вы захотите использовать комбинацию клавиш, которая при нажатии отображает логин в меню для установки URL-адреса и пароля. Вы также можете автоматически отображать заблокированное меню во время настройки, когда URL еще не установлен.

Вам необходимо будет постоянно хранить пароль и URL-адрес, используя chrome.storage api.

manifest.json:

"permissions": [ "storage" ] 

Вы можете обрабатывать комбинации клавиш с помощью chrome.commands api.

manifest.json:

"commands": { 
"adminmenu": { 
    "suggested_key": { "default": "Alt+A" }, 
    "description": "Show admin menu" 
} } 

main.js:

chrome.commands.onCommand.addListener(showadmin) 

Вы можете обращаться с меню и пароль ворота с помощью dialog element.

main.html:

<dialog id="adminpassword"> 
Admin options. Press alt a to reopen. 
<br><br> 
Admin password: <input type="text" id="enterpassword"> 
<br><br> 
<button id="close">Close</button> 
<button id="unlock" style="float: right">Unlock</button> 
</dialog> 
<dialog id="adminoptions"> 
Admin options. Press alt a to reopen. 
<br><br> 
New password: <input type="text" id="newpassword"> 
<br><br> 
Site url: <input type="text" id="newurl"> 
<br><br> 
<button id="close">Close</button> 
<button id="save" style="float: right">Save</button> 
</dialog> 

На правильный пароль введен и разблокировать кнопку нажал, откройте параметры администратора. Закройте диалоговые окна при нажатии кнопки закрытия. Сохраните обновленные значения при нажатии кнопки сохранения.

main.js:

var passworddialog = document.querySelector("#adminpassword") 
var admindialog = document.querySelector("#adminoptions") 
var closepassword = passworddialog.querySelector("#close") 
var closeadmin = admindialog.querySelector("#close") 
var unlockadmin = passworddialog.querySelector("#unlock") 
var saveoptions = admindialog.querySelector("#save") 
var enterpassword = passworddialog.querySelector("#enterpassword") 
var newpassword = admindialog.querySelector("#newpassword") 
var newurl = admindialog.querySelector("#newurl") 

function showadmin() { 
passworddialog.showModal() 
} 

closepassword.addEventListener("click", function() { 
passworddialog.close() 
}) 
closeadmin.addEventListener("click", function() { 
admindialog.close() 
}) 

unlockadmin.addEventListener("click", function() { 
chrome.storage.local.get("password", function(storage) { 
    passworddialog.close() 
    if(enterpassword.value == storage.password) { 
    admindialog.showModal() 
} }) }) 

saveoptions.addEventListener("click", function() { 
chrome.storage.local.set({ password: newpassword.value, url: newurl.value }) 
}) 

При загрузке, установите пароль по умолчанию, если он не определен и откройте меню входа в систему. В противном случае введите диалог настроек администратора.

main.js:

chrome.storage.local.get(function(storage) { 
if(storage.password) { 
    newpassword.value = storage.password 
} else { 
    chrome.storage.local.set({ password: "admin" }) 
} 
if(storage.url) { 
    newurl.value = storage.url 
} else { 
    showadmin() 
} })