Web Foundations

Permissions API

Requesting permissions, checking status, and handling denial.

Advertisement

Permissions API

Requesting permissions, checking status, and handling denial.

Overview

The Permissions API provides a way to check and request browser permissions.

Key Concepts

  • query() — Check permission status
  • request() — Request permission
  • Permission States — granted, denied, prompt
  • Persistent Permissions — User preferences
  • Feature Detection — Check API support

Code Examples

<div id="status"></div>
<button id="requestCamera">Request Camera</button>
<button id="requestNotification">Request Notification</button>

<script>
const statusDiv = document.getElementById('status');

function updateStatus(permission, state) {
  const div = document.createElement('div');
  div.textContent = `${permission}: ${state}`;
  div.className = `status-${state}`;
  statusDiv.appendChild(div);
}

// Check permission status
async function checkPermissions() {
  const permissions = ['camera', 'microphone', 'geolocation', 'notifications'];
  
  for (const permission of permissions) {
    try {
      const result = await navigator.permissions.query({ name: permission });
      updateStatus(permission, result.state);
      
      result.addEventListener('change', () => {
        updateStatus(permission, result.state);
      });
    } catch (error) {
      updateStatus(permission, 'not supported');
    }
  }
}

// Request camera permission
document.getElementById('requestCamera').addEventListener('click', async () => {
  try {
    const stream = await navigator.mediaDevices.getUserMedia({ video: true });
    updateStatus('camera', 'granted');
    stream.getTracks().forEach(track => track.stop());
  } catch (error) {
    updateStatus('camera', 'denied');
  }
});

// Request notification permission
document.getElementById('requestNotification').addEventListener('click', async () => {
  const result = await Notification.requestPermission();
  updateStatus('notification', result);
});

// Check if permission API is supported
if ('permissions' in navigator) {
  checkPermissions();
} else {
  statusDiv.textContent = 'Permissions API not supported';
}
</script>

<style>
.status-granted {
  color: #28a745;
  font-weight: bold;
}

.status-denied {
  color: #dc3545;
  font-weight: bold;
}

.status-prompt {
  color: #ffc107;
  font-weight: bold;
}

.status-not {
  color: #6c757d;
  font-style: italic;
}
</style>

Practice

Build a permission request flow for camera and microphone access.

Advertisement