CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-webrtc-adapter

A shim to insulate apps from WebRTC spec changes and browser prefix differences

Overall
score

98%

Overview
Eval results
Files

browser-detection.mddocs/

Browser Detection

WebRTC Adapter's browser detection system automatically identifies the WebRTC engine, browser version, and specific capabilities to determine which shims need to be applied.

Capabilities

Browser Details Object

The main source of browser information available through adapter.browserDetails.

interface IBrowserDetails {
  /** Browser name: 'chrome', 'firefox', 'safari', or 'Not a browser.' */
  browser: string;
  /** Browser version number, null if unable to detect */
  version: number | null;
  /** Safari-specific: WebRTC Unified Plan support detection */
  supportsUnifiedPlan?: boolean;
}

Usage Examples:

import adapter from 'webrtc-adapter';

// Check browser type
switch (adapter.browserDetails.browser) {
  case 'chrome':
    console.log('Chrome-based browser detected');
    break;
  case 'firefox':
    console.log('Firefox browser detected');
    break;
  case 'safari':
    console.log('Safari browser detected');
    break;
  default:
    console.log('Unsupported or unknown browser');
}

// Check version for feature support
if (adapter.browserDetails.browser === 'chrome' && adapter.browserDetails.version >= 74) {
  console.log('Supports modern WebRTC features');
}

// Safari-specific capability check
if (adapter.browserDetails.browser === 'safari' && adapter.browserDetails.supportsUnifiedPlan) {
  console.log('Safari supports Unified Plan');
}

Detect Browser Function

Low-level browser detection function that analyzes the user agent string.

/**
 * Detects browser type and version from window object
 * @param window - Browser window object
 * @returns Browser details object with detected information
 */
function detectBrowser(window: Window): IBrowserDetails;

Usage Examples:

import { detectBrowser } from 'webrtc-adapter/src/js/utils.js';

// Manual browser detection
const browserInfo = detectBrowser(window);
console.log(`Detected: ${browserInfo.browser} version ${browserInfo.version}`);

// Custom window object (useful for testing)
const mockWindow = { navigator: { userAgent: 'Mozilla/5.0...' } };
const mockBrowserInfo = detectBrowser(mockWindow);

Extract Version Function

Utility function for parsing version numbers from user agent strings using regular expressions.

/**
 * Extract browser version from user agent string
 * @param uastring - User agent string to parse
 * @param expr - Regular expression pattern for version extraction
 * @param pos - Position in regex match array containing version
 * @returns Parsed version number or null if not found
 */
function extractVersion(uastring: string, expr: string, pos: number): number;

Usage Examples:

import adapter from 'webrtc-adapter';

// Extract Chrome version
const chromeVersion = adapter.extractVersion(
  navigator.userAgent,
  /Chrom(e|ium)\/(\d+)\./,
  2
);

// Extract Firefox version  
const firefoxVersion = adapter.extractVersion(
  navigator.userAgent,
  /Firefox\/(\d+)\./,
  1
);

// Custom version extraction
const customVersion = adapter.extractVersion(
  'MyApp/1.2.3 (Windows)',
  /MyApp\/(\d+\.\d+\.\d+)/,
  1
);

Browser Detection Logic

The detection system uses the following priority order:

  1. Modern Chrome Detection: Uses navigator.userAgentData.brands when available for Chromium detection
  2. Firefox Detection: Checks for navigator.mozGetUserMedia presence
  3. Chrome/Chromium Detection: Falls back to navigator.webkitGetUserMedia or window.webkitRTCPeerConnection
  4. Safari Detection: Identifies Safari through window.RTCPeerConnection + WebKit user agent pattern
  5. Fallback: Returns "Not a supported browser" for unrecognized browsers

Supported Browsers

  • Chrome/Chromium: Includes Chrome, Chromium, Opera, Edge (Chromium-based), and WebView
  • Firefox: All Firefox variants with WebRTC support
  • Safari: Desktop and mobile Safari with WebRTC capabilities
  • Unsupported: Returns appropriate messages for non-WebRTC browsers

Install with Tessl CLI

npx tessl i tessl/npm-webrtc-adapter

docs

browser-detection.md

chrome-shims.md

common-shims.md

factory-configuration.md

firefox-shims.md

index.md

safari-shims.md

utility-functions.md

tile.json