diff --git a/src/framework/FileSystem.cpp b/src/framework/FileSystem.cpp
--- a/src/framework/FileSystem.cpp
+++ b/src/framework/FileSystem.cpp
@@ -6440,6 +6440,10 @@
 =================
 */
 void idFileSystemLocal::StartBackgroundDownloadThread() {
+#ifdef __EMSCRIPTEN__
+	common->Printf( "Background downloads use the synchronous browser fallback\n" );
+	return;
+#else
 	if ( !backgroundThread.threadHandle ) {
 		Sys_CreateThread( (xthread_t)BackgroundDownloadThread, NULL, THREAD_NORMAL, backgroundThread, "backgroundDownload", g_threads, &g_thread_count );
 		if ( !backgroundThread.threadHandle ) {
@@ -6448,6 +6452,7 @@
 	} else {
 		common->Printf( "background thread already running\n" );
 	}
+#endif
 }
 
 /*
@@ -6483,6 +6488,23 @@
 =================
 */
 void idFileSystemLocal::BackgroundDownload( backgroundDownload_t *bgl ) {
+#ifdef __EMSCRIPTEN__
+	bgl->next = NULL;
+	if ( bgl->opcode == DLTYPE_FILE ) {
+		bgl->f->Seek( bgl->file.position, FS_SEEK_SET );
+		bgl->f->Read( bgl->file.buffer, bgl->file.length );
+	} else {
+		bgl->url.status = DL_FAILED;
+		bgl->url.dlstatus = 0;
+		bgl->url.dlnow = 0;
+		idStr::Copynz(
+			bgl->url.dlerror,
+			"background URL downloads are unavailable in the browser",
+			MAX_STRING_CHARS );
+	}
+	bgl->completed = true;
+	return;
+#endif
 	if ( bgl->opcode == DLTYPE_FILE ) {
 		if ( dynamic_cast<idFile_Permanent *>(bgl->f) ) {
 			// add the bgl to the background download list
