You cannot remove WebRTC’s entire getDisplayMedia() picker or silently choose a screen, window, or tab. The browser must let the user choose a display surface on every call. You can, however, ask the browser to omit monitor choices with monitorTypeSurfaces: "exclude", express a preferred surface type with video.displaySurface, and inspect what the user selected after sharing starts.
What “without the screen area selector” can and cannot mean
There are two different requests hidden in this phrase:
- Hide entire-monitor choices. This is possible as a browser preference. Set the top-level
monitorTypeSurfacesoption to"exclude". - Remove the browser picker or select a source silently. This is not possible for a normal web page. The user agent must let the end user choose a display surface every time.
The normative rule is in the W3C Screen Capture specification: “The user agent MUST let the end-user choose which display surface to share out of all available choices every time, and MUST NOT use any MediaTrackConstraints in options.video or options.audio to limit that choice.” This protects users from a site recording a screen or window without an explicit selection.
Therefore, an application can influence presentation, not take ownership of source selection. The browser may ignore preference hints, and users retain the final decision.
#1 Best Overall
- Compatible with Nintendo Switch 2’s new GameChat mode
- Auto-Light Balance: RightLight boosts brightness by up to 50%, reducing shadows so you look your best—compared to previous-generation Logitech webcams (1)
- Privacy with a Slide: The integrated webcam cover makes it easy to get total, reliable privacy when you're not on a video call
- Built-In Mic: The built-in microphone lets others hear you clearly during video calls
- Easy Plug-And-Play: The Brio 101 works with most video calling platforms, including Microsoft Teams, Zoom and Google Meet—no hassle; it just works
Minimal JavaScript implementation
This example asks the browser to exclude monitor surfaces, starts a video-only capture, and reports the type of surface the user actually selected.
async function startScreenShare() {
try {
const stream = await navigator.mediaDevices.getDisplayMedia({
video: true,
audio: false,
monitorTypeSurfaces: "exclude",
});
const [videoTrack] = stream.getVideoTracks();
const selectedSurface = videoTrack.getSettings().displaySurface;
console.log("User selected surface:", selectedSurface);
return stream;
} catch (error) {
console.error("Display capture was not started:", error);
throw error;
}
}
getDisplayMedia() resolves only after the user has made a choice. The returned MediaStream can be attached to a preview or added to an RTCPeerConnection for WebRTC transmission.
Show a local preview
async function shareInto(videoElement) {
const stream = await startScreenShare();
videoElement.srcObject = stream;
await videoElement.play();
const [track] = stream.getVideoTracks();
track.addEventListener("ended", () => {
videoElement.srcObject = null;
console.log("The user stopped sharing");
});
return stream;
}
Give the stop button an explicit way to end capture:
function stopScreenShare(videoElement) {
const stream = videoElement.srcObject;
if (stream) {
for (const track of stream.getTracks()) track.stop();
videoElement.srcObject = null;
}
}
Options that affect the picker
| Option | What it does | What it does not do |
|---|---|---|
monitorTypeSurfaces: "exclude" |
Requests that entire monitors be left out of the available choices. | It does not guarantee removal; the specification allows a browser to ignore the preference. |
video: { displaySurface: "browser" } |
Expresses a preference for a browser-tab surface. | It does not identify a particular tab or remove windows and monitors. |
video: { displaySurface: "window" } |
Expresses a preference for a window surface. | It does not force the user to share a particular window. |
video: { displaySurface: "monitor" } |
Expresses a preference for an entire monitor. | It must not be combined with monitorTypeSurfaces: "exclude". |
selfBrowserSurface: "exclude" |
Asks the browser not to offer the current application tab, which can help avoid recursively sharing your own preview. | It does not remove the picker or all browser tabs. |
preferCurrentTab: true |
Asks supporting browsers to make the current tab prominent. | It is the opposite goal of excluding the current tab and remains only a hint. |
These controls are documented by MDN’s getDisplayMedia reference and browser-specific guidance from Chrome for Developers. Support and presentation can vary by browser and version, so test every browser your product promises to support.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteCombining monitor exclusion with a preferred window
If your workflow normally needs a window and should avoid the current tab, use separate hints:
Rank #2
- Compatible with Nintendo Switch 2’s new GameChat mode
- Crisp HD 720p/30 fps video calls with diagonal 55° field of view and auto light correction. Compatible with popular platforms including Skype and Zoom.
- The built-in noise-reducing mic makes sure your voice comes across clearly up to 1.5 meters away, even if you’re in busy surroundings.
- C270’s RightLight 2 feature adjusts to lighting conditions, producing brighter, contrasted images to help you look good in all your conference calls.
- The adjustable universal clip lets you attach the camera securely to your screen or laptop, or fold the clip and set the webcam on a shelf. You’re always ready for your next video call.
async function shareWindow() {
const stream = await navigator.mediaDevices.getDisplayMedia({
video: { displaySurface: "window" },
audio: false,
monitorTypeSurfaces: "exclude",
selfBrowserSurface: "exclude",
});
const [track] = stream.getVideoTracks();
console.log("Actual selection:", track.getSettings().displaySurface);
return stream;
}
This configuration asks for a window, requests that monitors be excluded, and asks to exclude the current tab where supported. It still opens the browser-controlled picker. Do not set displaySurface: "monitor" while also requesting monitorTypeSurfaces: "exclude"; MDN documents that contradiction as a possible TypeError.
Read the user’s final choice
displaySurface is useful in two different places. In the request, it is a preference. In the returned track’s settings, it reports the result after the user chooses:
const stream = await navigator.mediaDevices.getDisplayMedia({
video: true,
audio: false,
monitorTypeSurfaces: "exclude",
});
const track = stream.getVideoTracks()[0];
const settings = track.getSettings();
switch (settings.displaySurface) {
case "browser":
console.log("A browser tab was shared");
break;
case "window":
console.log("An application window was shared");
break;
case "monitor":
console.log("A monitor was shared");
break;
default:
console.log("The browser did not report a surface type");
}
Do not use this value to pretend that your application selected the source. It is a report of the user’s decision and may be unavailable in a particular implementation.
Free tools Windows power users keep installed
One-click scans. No signup required.
Why a web app cannot preselect a specific tab or window
A browser knows which tabs, windows, and displays are available, but exposing a direct source selector to page script would let a site capture sensitive content without a deliberate user choice. Chrome’s screen-sharing guidance explicitly explains that a web app cannot preselect a particular window or screen because that would give the application too much power over the user’s choice.
Media-track constraints are therefore not a workaround. The specification specifically prevents options.video and options.audio constraints from limiting the set of surfaces presented to the user.
Rank #3
- 【Full HD 1080P Webcam】Powered by a 1080p FHD two-MP CMOS, the NexiGo N60 Webcam produces exceptionally sharp and clear videos at resolutions up to 1920 x 1080 with 30fps. The 3.6mm glass lens provides a crisp image at fixed distances and is optimized between 19.6 inches to 13 feet, making it ideal for almost any indoor use.
- 【Wide Compatibility】Works with USB 2.0/3.0, no additional drivers required. Ready to use in approximately one minute or less on any compatible device. Compatible with Mac OS X 10.7 and higher / Windows 7, 8, 10 & 11 / Android 4.0 or higher / Linux 2.6.24 / Chrome OS 29.0.1547 / Ubuntu Version 10.04 or above. Not compatible with XBOX/PS4/PS5.
- 【Built-in Noise-Cancelling Microphone】The built-in noise-canceling microphone reduces ambient noise to enhance the sound quality of your video. Great for Zoom / Facetime / Video Calling / OBS / Twitch / Facebook / YouTube / Conferencing / Gaming / Streaming / Recording / Online School.
- 【USB Webcam with Privacy Protection Cover】The privacy cover blocks the lens when the webcam is not in use. It's perfect to help provide security and peace of mind to anyone, from individuals to large companies. 【Note:】Please contact our support for firmware update if you have noticed any audio delays.
- 【Wide Compatibility】Works with USB 2.0/3.0, no additional drivers required. Ready to use in approximately one minute or less on any compatible device. Compatible with Mac OS X 10.7 and higher / Windows 7, 10 & 11, Pro / Android 4.0 or higher / Linux 2.6.24 / Chrome OS 29.0.1547 / Ubuntu Version 10.04 or above. Not compatible with XBOX/PS4/PS5.
Production error handling and recovery
The promise rejects with a TypeError
- Check for contradictory settings, especially
displaySurface: "monitor"together withmonitorTypeSurfaces: "exclude". - Validate option spelling and value casing. Use
"browser","window", or"monitor"exactly. - Retry with a minimal request such as
{ video: true, audio: false }to isolate browser-specific hint handling.
The user closes or cancels the picker
Treat cancellation as a normal branch, not an application failure. Keep the share button available and explain that a display surface must be selected. Do not repeatedly invoke the picker without another user action.
async function requestShare() {
try {
return await navigator.mediaDevices.getDisplayMedia({
video: true,
audio: false,
monitorTypeSurfaces: "exclude",
});
} catch (error) {
if (error && (error.name === "AbortError" || error.name === "NotAllowedError")) {
showMessage("Sharing was cancelled or not allowed. Choose a surface to continue.");
return null;
}
showMessage("This browser could not start display capture.");
throw error;
}
}
Monitor choices still appear
monitorTypeSurfaces is a preference, not an enforceable restriction. The browser may ignore it. Record the browser and version during compatibility testing and design the UI so it remains safe if a monitor is offered.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →The current tab appears and creates a recursive preview
Add selfBrowserSurface: "exclude" when supported. If your product instead needs the current tab to be easy to select, use preferCurrentTab: true; do not combine those opposing goals.
The stream ends unexpectedly
Users can stop sharing from browser chrome. Listen for the video track’s ended event, remove the preview, stop any peer-connection sender that depends on the track, and update your UI to offer a new share action.
Compatibility and testing checklist
- Test the exact browser versions and operating systems you support; optional hints can be ignored or presented differently.
- Verify tab, window, and monitor choices separately.
- Verify the behavior when the current tab is excluded and when it is preferred.
- Test cancellation, permission denial, repeated starts, and the browser’s stop-sharing control.
- Log
track.getSettings().displaySurfaceafter selection so support reports distinguish the requested preference from the actual result. - Confirm your WebRTC sender handles track replacement or an ended track without leaving a stale video element.
Or skip the browser setup
If your goal is a static image or PDF of a URL rather than an interactive user-selected display surface, ScreenshotNeo provides a website screenshot API and MCP server. It does not replace getDisplayMedia() for live screen sharing; it captures a web page from a URL.
Rank #4
- 1080P Webcam with Cover for Video Calls - EMEET computer webcam provides design and Optimization for professional video streaming. Realistic 1920 x 1080p video, 5-layer anti-glare lens, providing smooth video. C960 computer camera delivers 1920x1080 video with fixed focus (11.8–118.1 inches), so as to provide a clearer image. C960 USB webcam has a cover and can be removed automatically to meet your needs for privacy. For optimal image performance, use the webcam in a well-lit environment.
- Built-in 2 Omnidirectional Mics - EMEET webcam with microphone for desktop features 2 built-in omnidirectional microphones, picking up your voice to create clear audio for communication. When installing the webcam, select EMEET C960 as the default microphone input device in your computer and video applications and select C960 as the default device in Zoom/Teams and ensure microphone permissions are enabled for proper use. Please note that C960 does not include built-in speakers.
- Automatic Light Adjustment - Automatic exposure adjustment is applied in EMEET HD webcam 1080p so that the streaming webcam can deliver stable image performance. EMEET C960 camera for computer also features color adjustment and exposure optimization to help you look your best. For optimal video quality, it is recommended to use the webcam in normal or well-lit environments and select suitable video settings in your application. Proper lighting helps achieve a clearer and more balanced image.
- Plug-and-Play & Upgraded USB Connectivity - New C960 webcam features both USB Type-A & A-to-C adapter connections for wider compatibility. For stable performance, connect the webcam directly to the computer's main USB port and ensure the device is recognized correctly. If a hub or docking station is used, please ensure it provides sufficient power and stable data transmission, as limited ports may affect performance. 90° wide-angle lens captures more participants without frequent adjustments.
- High Compatibility & Multi Application - C960 webcam for laptop is compatible with Windows 10/11, macOS 10.14+, and Android TV 7.0+. Not supported: Windows Hello, TVs, tablets, or game consoles. It works with Zoom, Teams, Facetime, Google Meet, YouTube and more. Please select C960 webcam as the default camera and microphone device in your application and ensure camera/microphone permissions are enabled, especially on macOS. (Tips: Incompatible with Windows Hello)
One GET request returns a PNG, JPEG, WebP, or PDF. See the ScreenshotNeo API documentation for the complete option list.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
- Cookie and consent banners, newsletter popups, and chat widgets are removed before the shot.
- Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed; response headers identify the page verdict and billing result.
- An MCP server provides
take_screenshot,get_page_info, andcapture_pdftools for Claude, Cursor, and other MCP clients. - The Free plan includes 1,000 screenshots per month with no card. Paid plans start at $5 for 3,000 shots; every feature is available on every plan.
Create a free ScreenshotNeo account to get the 1,000 monthly screenshots without adding a card.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Frequently asked questions
Can JavaScript hide the entire screen-area selector?
No. The browser must present a user-controlled surface choice for every getDisplayMedia() call.
Does monitorTypeSurfaces: "exclude" guarantee that no monitor is offered?
No. It is a preference that a user agent may ignore, so verify behavior in the browser versions you support.
How do I know whether the user picked a tab or a window?
Read getSettings().displaySurface on the returned video track after the picker completes.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Best Value
- Compatible with Nintendo Switch 2’s new GameChat mode
- HD lighting adjustment and autofocus: The Logitech webcam automatically fine-tunes the lighting, producing bright, razor-sharp images even in low-light settings. This makes it a great webcam for streaming and an ideal web camera for laptop use
- Advanced capture software: Easily create and share video content with this Logitech camera that is suitable for use as a desktop computer camera or a monitor webcam
- Stereo audio with dual mics: Capture natural sound during calls and recorded videos with this 1080p webcam, great as a video conference camera or a computer webcam
- Full HD 1080p video calling and recording at 30 fps. You'll make a strong impression with this PC webcam that features crisp, clearly detailed, and vibrantly colored video
Can ScreenshotNeo capture a user’s live desktop?
No. ScreenshotNeo captures web pages from URLs. Use getDisplayMedia() when the user must choose and share a live tab, window, or monitor.
Frequently Asked Questions
Can JavaScript hide the entire screen-area selector?
No. The browser must present a user-controlled surface choice for every getDisplayMedia() call.
Does monitorTypeSurfaces: “exclude” guarantee that no monitor is offered?
No. It is a preference that a user agent may ignore, so verify behavior in the browser versions you support.
How do I know whether the user picked a tab or a window?
Read getSettings().displaySurface on the returned video track after the picker completes.
Can ScreenshotNeo capture a user’s live desktop?
No. ScreenshotNeo captures web pages from URLs. Use getDisplayMedia() when the user must choose and share a live tab, window, or monitor.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

