Logging out of managed chromebook running in single app kiosk mode - google-chrome-extension

I am a 'Chrome for Business and Education' admin for a fleet of chromebooks which I have configured to run in Single App Kiosk mode. The kiosk app in question is really simple. All I did was take the example code from this page that uses the 'webview tag' (without controls, as we need all the whole screen for the app in question) and change the URL. The app has installed perfectly in all managed devices.
The problem now is that there are times when we want to be able to exit the kiosk app and return to the chromebook login screen. Right now the only way of doing this is to shut the machine down, start it and exit from the kiosk app boot screen by pressing Ctrl+Alt+S. The whole process takes 30 seconds plus per machine (the fleet contains 50). So we really need to be able to just quit out of the kiosk app and go back to the login screen (which would take about 5 seconds or less).
Now, I could just add a quit button to the screen (as per the second example app with navigation controls from the page referenced above) but this means we lose screen space for the app. The preferred solution is to close the app with keystrokes (e.g. Ctrl+Shift+L). But how do you do this in this context? I have tried adding conventional onkeydown javascript to the page containing the webview tag and this seems to be ignored. I have also tried using the 'chrome commands API', and whilst I can see that the shortcut had been registered against the extension (by clicking 'Keyboard shortcuts' on the chrome://extensions tab) it has no effect. The kiosk app window remains stubbornly open.
Does anyone know if this is possible and if so how?
Cheers,
Miles

In your manifest.json file add this entry to create the command for the app.
"commands": {
"exit-app": {
"suggested_key": {
"default": "Ctrl+Shift+L"
},
"description": "Exit the app"
}
}
Then you need to add code to your background script file to listen for the command. This code will close all windows in the app when it receives the exit-app command you created in the manifest.
chrome.commands.onCommand.addListener(function(command) {
switch(command) {
case 'exit-app':
exitApp();
break;
}
});
function exitApp() {
chrome.app.window.getAll().forEach(function(win) {
win.close();
});
}
Note that the key combination is only suggested, and might be ignored if another app or Chrome keyboard shortcut already uses that combination. You do still need to go to the Keyboard shortcuts link on the chrome://extensions page and verify that the key combination has actually been set for your app.

Related

Is there a way to configure "exit_on_all_closed" for browser tabs?

I'm currently working on understanding building Rust apps using Bevy in WebAssembly. Under normal circumstances, the exit_all_on_closed variable in the following code allows for the app to close when the window the app is launched in is closed.
fn main() {
App::new()
.add_plugins(DefaultPlugins.set(WindowPlugin {
window: WindowDescriptor {
title: "Extreme".to_string(),
..default()
},
add_primary_window: true,
exit_on_all_closed: true,
close_when_requested: true,
}))
.run()
}
Since I'm launching the app in my browser using a wasm server, I'd assumed that closing either the tab the app launches in or the entire browser would trigger the app exit, but it does not. Is there functionality in Bevy to handle that? Is there another work around?
Attempted: set exit_all_on_closed to true, launch app in browser, and close browser. Expected app to exit.
Actual result: Browser window closed but app is still running.
You can use the browsers beforeunload event via web-sys to track when users close a tab or a browser window containing your application.
Using this in combination with onload would also allow you to track all currently open instances.

Show apps on top of the lock screen

I'm building an app using Electron. And I really want to recreate what UWP apps can do. UWP apps can get shown on top of the lock screen. How can I achieve that using Electron/NodeJS?
I tried to do this, but it didn't work:
const mainWindow = electron.remote.getCurrentWindow();
if(isWindows10){
try{
lockSystem();
}catch{
//return an error
}
}
mainWindow.restore();
mainWindow.focus();
mainWindow.setKiosk(true);
And if you're wondering about the fact that UWP apps can get rendered on top of the lock screen, yes they indeed can get rendered on top of the lock screen. You can try to take an exam on exam.net on a windows 10 device, and choose the restricted mode. This will result in chrome opening a pop-up window that asks you to run a UWP app that will lock the device and get rendered on top of the lock screen.
https://www.electronjs.org/docs/tutorial/windows-store-guide - This won't help, as the app doesn't gain access to UWP APIs/features.
EDIT: https://github.com/felixrieseberg/electron-uwp-background - Never mind, it is possible to access those features. But I can't figure out how to do it. Any idea?

How to debug chrome extension with DevTools or other debugger?

Is there any way to debug chrome extension using debugger ( break points and step in/out)
beside console.log ?
Chrome 70.x debugging of chrome background scripts is broken, especially when you dynamically load them and they are not in the manifest. Have a ticket open to get it fixed; however they have not been very helpful; however found a work around...
Put a console.log("yourvariablenamehere") in your background.js script.
Hit F12 to open the dev tools, anchored to the bottom of the web page.
Load the background script via a button in your popup.html. Something like this from a button event...
var guid = CreateGuid();
chrome.tabs.executeScript(null, { file: "script/jquery-3.3.1.js" }, function () {
$.get("script/scrollPage.js?ver=" + guid, function (sScriptBody, textStatus, jsXHR) {
chrome.tabs.executeScript(null, { code: sScriptBody });
}, "text");
});
In the dev tools console you should see your logged variable. On the same line as the logged message is a VM with a number tacked onto it, a virtual script page. Select that VM page and then you get to the background script! Now put a breakpoint in the virtual script page, click the same button in your popup.html and it gets hit. And when you reload the popup and execute the background script that breakpoint is hit!
Hope this helps.
If you want to inspecting content scripts, a great method I found is using Console by selecting your extension in javascript context:
By selecting the extension you will have access to the global objects within that extension.
Reference:
Using the Developer tools to debug your extension

what replaced PhoneApplicationService.Current.UserIdleDetectionMode in Windows 10 mobile

basically I want to stop the lockscreen from kicking in on a windows 10 app while my app is running on windows phone 7+ it was PhoneApplicationService.Current.UserIdleDetectionMode now I cant seem to find a replacement.
You should use the DisplayRequest class.
When a display request is activated, the device's display remains on while the app is visible. When the user moves the app out of the foreground, the system deactivates the app's display requests and reactivates them when the app returns to the foreground.
Ref:
DisplayRequest class
Sample code:
var dr = new DisplayRequest();
dr.RequestActive();
// ...
dr.RequestRelease();

Show alert about internet connectivity before launching the application (Monotouch)

I am developing an app that requires an internet connection, so I want to check the availability before launch.
If internet connection it is not available, show an alert to the user and go back to Home instead of trying to launch the app.
So I used the Reachability class, that was recommended here (http://stackoverflow.com/questions/1961341/check-for-internet-access-with-monotouch) to check the internet connection.
So far so good. But if I place this check in my Main.cs, it performs the check, but will not display the alert.
if(!Reachability.IsHostReachable("http://google.com")) {
Debug.WriteLine("OFFLINE");
UIAlertView alert = new UIAlertView("Offline","Voor deze app is een internetverbinding vereist.",null,"OK",null);
alert.Show();
}
else{
MPFramework.Application app = new MPFramework.Application();
UIApplication.Main (args, null, "AppDelegate");
}
If I place this check in AppDelegate.cs it performs the check, displays the alert, but keeps a black screen instead of returning to Home.
So where do I place my code in order to check before launching the app, and displaying an alert?
You're looking at this a bit wrong:
Apple doesn't approve of apps that kill/close themselves (see this: https://stackoverflow.com/a/356342/183422). If the user wants to close your app, he should do it himself.
You need the main loop running to show any UI - and that main loop is started when you call UIApplication.Main (which is why you have to do the check in AppDelegate.cs and show the corresponding alert there instead of in your Main method).
So, putting these things together, I think you should show a blank/splash screen, check for reachability and if there is none then show the alert (and if the user dismisses the alert, maybe check again).

Resources