Edit

Enterprise Browser v1.3 introduced a change that requires to enable FunctionKeysCapturable to be able to use the KeyCapture API.

 

<FunctionKeysCapturable                 value="1"/>

 

Updating your config.xml with this option will enable the KeyCapture API.

 

 

Enterprise Browser

Enterprise Browser is Zebra Technologies' Industrial Browser built for our Rugged Devices, we support most of our Windows Mobile/Windows CE devices and Android devices.

This product is usually used with existing web application that cannot be updated/modified moving from one device to another. This help us winning some opportunities but sometimes present some unique challenges like, as an example, disabling the Android back button default behaviour.

 

Back Button on Android?

Given that this is a crossplatform product (built on top of our RhoMobile Suite) we don't have a custom settings to disable the back button in the Config.xml configuration file, however it is still possible to add a default Metatags in the configuration so that no changes in the existing pages are needed.

So, do we've an API to intercept the Back Button?

Of course! the KeyCapture API can be used to intercept and disable it.

 

EB.KeyCapture.captureKey(BOOLEAN dispatch, STRING keyValue)
   

 

Setting the dispatch value to false, We just need to get the correct KeyCode.

This can a bit tricky and can be different from device to device, the best solution I've is to ask directly to the device with a simple HTML page that display the keycode off all the keys that are pressed:

 

<!DOCTYPE html>
<html lan="en">
<META HTTP-Equiv="KeyCapture" Content="KeyValue:All; Dispatch:False; KeyEvent:url('JavaScript:alert('Key Pressed: %s');')">
  <head>
    <meta charset="utf-8">
  <title>Display KeyCode</title>
  </head>
  <body>
    <H1>Press a key to see it's KeyCode</H1>
  </body>
</html>
   

 

Once we've the correct KeyCode, we just need to call this API in every page that is loaded in the browser… Sometimes that is not easy to do sometimes, especially when the application cannot be modified.

We've a solution for this issue: having a DefaultMetaTags in Enterprise Browser's configuration.

 

What's a DefaultMetaTags

We can start from the documentation, what does it means?

A DefaultMetaTags is a way to call an Enterprise Browser API on top of every HTML page that is loaded in the browser. This can be used, as an example to enable on screen UI elements like the battery or WiFi icon.

So, putting the different things together, we can put this in the ''Config.xml':

 

<DefaultMetaTags>
    <MetaTag value="KeyCapture~KeyValue:0xA6;Dispatch:False"/>
</DefaultMetaTags>
   

 

BTW: 0xA6 is the correct value for the Back Button on a TC55 running Android v4.4 KitKat.

 

Closing comments

Enterprise Browser's DefaultMetaTags is a very flexible way to "patch" an existing Web application without touching its source code.

As a closing comment here's a sample configuration that zoom the current webpage pressing a button:

 

<MetaTag VALUE="KeyCapture~KeyValue:0x79;Dispatch:False;KeyEvent:url('JavaScript:eval('zoom.page=\'1.3\';');')"/>
   

 

This post has been reposted from my personal website.