A browser tab can detect tab switches, clipboard actions, fullscreen exits, device changes, and, from the camera, no face, multiple faces, and identity mismatches. It cannot see a phone on the desk, a virtual machine, a remote-desktop session, or, reliably, a second monitor. That split is a property of the web platform, not a gap in any one vendor: a tab has access to its camera, its microphone, and its own window, and nothing below the browser. This page maps each signal to the exact mechanism, and explains why the extension and desktop tiers exist.
Schedule a DemoEverything a browser tab observes reaches you as an event, live, through one callback. There is no hidden channel: what the SDK can report is exactly what a web page is permitted to know about its own camera, microphone, focus, and window. The event names below are the whole surface, so if a concern is not on this list, a plain tab cannot see it.
import { ProctorLink } from '@proctorlink/sdk';
// jwt and sessionId come from your backend's POST /v1/sessions response.
const session = ProctorLink.createSession({ jwt: sessionJwt, sessionId });
// Every signal a browser tab can legitimately observe arrives here, live.
session.onEvent((event) => {
switch (event.type) {
case 'tab.hidden': // candidate switched away from the exam tab
case 'clipboard.paste': // content pasted into the exam
case 'clipboard.copy': // exam content copied out
case 'fullscreen.exited': // left fullscreen
case 'device.changed': // a camera or microphone was swapped
review(event);
}
});
await session.start();The signals that arrive here are tab focus (tab.hidden, tab.visible), fullscreen state (fullscreen.entered, fullscreen.exited), clipboard actions (clipboard.copy, clipboard.cut, clipboard.paste), window changes (window.resized), the right-click menu (context.menu), device swaps (device.changed), and the page unloading (page.unload). None of these describe the room. They describe the tab. If you are new to the field, start with What is online proctoring? for the concepts before the mechanics.
The other half of detection is not a browser event at all. Periodic keyframes, one per minute by default, upload for server-side face analysis, and the findings appear in the report rather than in the live event stream. This is where presence, absence, multiple faces, and identity are decided.
// Your backend, once status is "validated". What the tab could NOT see
// is answered here instead: server-side face and activity analysis.
GET /v1/sessions/6a7b18df70e4f8ecf2597b6f
{
"face_analysis": {
"frames_checked": 42,
"no_face_frames": 3,
"multi_face_frames": 1,
"impersonation_frames": 0,
"min_match_score": 71.4
},
"activity": {
"by_type": { "tab.hidden": 2, "clipboard.paste": 1 }
}
}So the camera answers questions the tab events cannot: no_face_frames counts frames where nobody was visible, multi_face_frames counts frames with more than one person, and impersonation_frames with min_match_score measure how well each frame matched the reference photo. Audio analysis adds voice activity and speaker count. All of it is probabilistic, so the report states what was measured, frames where no face was detected, never that the candidate left the room. For how those verdicts are formed, see What is AI proctoring?.
This is the question buyers ask most, so here it is signal by signal. The short version: anything that lives inside the tab or in front of the camera is detectable, and anything that lives in the room, in another application, or below the browser is not, at least not from a browser tab alone.
| Concern | Detectable in a browser tab? | Mechanism |
|---|---|---|
| Candidate leaves the exam tab or window | Yes | tab.hidden and tab.visible events |
| Copy or paste of exam content | Yes | clipboard.copy, clipboard.cut, clipboard.paste events |
| Leaving fullscreen | Yes | fullscreen.exited event |
| A camera or microphone swapped mid-exam | Yes | device.changed event |
| No face, or more than one face, on camera | Yes, server-side and deferred | no_face_frames and multi_face_frames in the report |
| Someone other than the enrolled candidate | Yes, against a reference photo | identity_match and impersonation_frames |
| A phone or second device beside the candidate | No, not from the tab | Only via a keyframe a reviewer reads, or the desktop tier |
| A second monitor | Chrome only, permission-gated | Display enumeration, a desktop agent capability |
| A virtual machine or remote-desktop session | No | Desktop agent: process inspection (Tier 3) |
| Screen-recording software | No | Desktop agent: screen-recording detection (Tier 3) |
| A virtual camera such as OBS | As a signal, not proof | Device heuristics on the video input |
A phone on the desk is the clearest example. A web page has no access to the room, so it cannot see the phone directly. It can only surface it indirectly: the candidate glancing down may show in a keyframe a reviewer then reads, and switching to a phone-mirroring app fires tab.hidden. A second monitor is detectable only in Chrome and only with the candidate’s permission, and a virtual machine or remote-desktop session is invisible to any tab because it lives below the browser.
The limits above are not something to apologise for; they are the reason the deployment model is tiered. Each tier adds privileged software that can see one layer deeper, so you match the tier to your risk rather than reaching for the deepest one by default.
| Tier | Candidate install | What it can observe |
|---|---|---|
| Tier 1: Browser SDK | None | Camera, microphone, focus and blur, fullscreen state, clipboard, device changes |
| Tier 2: Browser extension | Extension | Adds tab enumeration, per-application focus, and download blocking |
| Tier 3: Desktop agent | Desktop app | Process inspection, display enumeration, screen-recording detection, and full lockdown |
Tier 1 is the browser SDK covered on this page: no install, the events and face analysis above. The browser extension adds tab enumeration, per-application focus, and download blocking. The desktop agent adds process inspection, display enumeration, screen-recording detection, and full lockdown, which is what makes a second monitor or a virtual machine detectable. If you are choosing between these routes and the Moodle plugin or an LTI launch, the decision guide is Proctoring SDK vs API vs LMS plugin, and the integration itself is walked through in How to add proctoring to a web application.
Detecting a signal and penalising it are different things, and conflating them is how proctoring earns a reputation for false accusations. Browser events are recorded as context for a reviewer; face analysis is what drives the verdict. Only a pooled set of browser events deducts points at all, capped at a combined twenty: tab.hidden, fullscreen.exited, the clipboard actions, and camera.denied.
Everything else, including tab.visible, fullscreen.entered, window.resized, context.menu, device.changed, and page.unload, is captured and returned but does not change the score, because each fires often for innocent reasons: a rotated phone, a Bluetooth headset connecting, a normal exam submission. That restraint is deliberate. Ordinary behaviour should not manufacture an accusation, so a single tab switch does not flag a candidate. The heaviest penalties sit with the face findings, identity mismatch and multiple faces, which is why the camera, not the clipboard, is the real detector.
no_face_frames as a signal that lowers the score and points a reviewer at a moment, then confirm with the evidence images.The platform imposes one more limit worth stating plainly. iOS Safari has no screen-capture API, and it suspends the camera when the tab is backgrounded, so a candidate who switches apps on an iPhone stops sending frames rather than being recorded doing so. A client that goes silent is itself a signal, though: a session that stops reporting scores worse than one reporting violations, because the continuous heartbeat monitoring notices the gap. Plan mobile exams around that behaviour rather than assuming a phone browser observes as much as a desktop one.
Institutions evaluating proctoring tools often look for independent feedback outside vendor case studies. ProctorLink is listed on G2, where Moodle administrators and training teams share verified product reviews.
Read ProctorLink reviews on G2 →Deployment statistics and product behaviour described in this guide link to the sources below.
Match the tier to your risk, then see the signals in a real report before you commit. The browser SDK covers the events and face analysis on this page with no candidate install.
See the live events and the integrity report in a 30-minute developer walkthrough.
Get SDK credentials and the full API reference for the event stream and report.
Per-session and subscription models for custom applications and LMS exams.
The step-by-step integration that produces the events and report shown here.
Pick the route, and the tier, that matches the detection you actually need.
Back to the knowledge hub for the full SDK and proctoring series.
Online proctoring supervises remote exams via webcam and microphone inside your LMS, logging rule violations with timestamps so reviewers judge flagged cases, not every session.
AI proctoring uses machine learning to automatically detect suspicious exam behaviour such as multiple faces, tab switching, and absence from the camera.
A comparison of leading Moodle proctoring plugins for universities that need native LMS integration, AI monitoring, and institution-owned data.
How university exam offices choose online proctoring software for entrance grids, finals, and multi-faculty calendars, including stakeholder RFPs and centre-vs-online cost tradeoffs.
How certification bodies and training providers use online proctoring for identity proofing, item-bank protection, and defensible, audit-ready credentialing exams.
A side-by-side comparison of AI proctoring and live human proctoring for cost, scale, accuracy, and exam security.
Practical steps to reduce cheating in Moodle quizzes using proctoring settings, question banks, timing controls, and AI monitoring.
Feature-by-feature comparison of Moodle proctoring plugins covering integration, AI detection, pricing, and data storage.
A guide to online exam proctoring for Indian universities and certification providers, including compliance, pricing in INR, and local case studies.
How to choose between a proctoring LMS plugin, a browser SDK, and a REST API when adding proctoring to software you already own, with a decision guide and code examples.
A step-by-step guide to adding exam proctoring to a web app you own: mint a session on your backend, run the browser SDK, and read a server-side integrity report, with code from the API reference.
The browser SDK reports tab switches, clipboard actions, and face findings with no candidate install. Deeper detection moves up the tiers. Pilot it on a real exam and read the report before you decide.