An ordinary web page: plain HTML fields, no SDK, no vendor code. Kioskope adds camera scanning to any site you point it at.
Tap a field, then scan any code below. SKU is data-scan="auto": focusing it opens the scanner by itself.
Each panel emulates an incumbent vendor's integration, running unmodified against Kioskope's shims. While any callback is registered, scans are delivered to it and the keyboard wedge is suppressed (Zebra semantics). Enable one at a time, then scan any code below.
kioskope:scan eventAlways on. Every scan dispatches this DOM event, whether or not the wedge or a callback handled it.
document.addEventListener('kioskope:scan', e => use(e.detail.code, e.detail.symbology))
EB.Barcode.enable()Registers a continuous callback. The result object mirrors Zebra's: data, type, time, length, source, direction.
EB.Barcode.enable({}, r => use(r.data)) // EB.Barcode.disable() unregisters
EB.Barcode.take()One-shot: opens the scanner, delivers a single result, unregisters itself.
EB.Barcode.take({}, r => use(r.data))
kp_ZBarScanner_*The page defines a global callback; startScan() opens the scanner. The type is a ZBar integer (QR = 64, PDF417 = 57, Code 128 = 128).
window.kp_ZBarScanner_scanDidFinishWithDataEx = (data, type) => use(data, type) kp_ZBarScanner_startScan()
fully.bind() + fully.scanQrCode()bind registers a JS string to run per scan; $code is textually replaced with the scanned value. scanQrCode() opens the scanner.
fully.bind('onQrScanSuccess', 'use("$code")')
fully.scanQrCode()
barcodeScanResult(data)Fully's Zebra-hardware callback: define the global function and every scan is passed to it as a plain string.
window.barcodeScanResult = data => use(data)
Configured entirely in Kioskope admin (Output → URL template, e.g. https://x/lookup/{code}): each scan navigates the browser to that URL. The page implements nothing.