2

Есть ли способ полностью удалить свойство serviceWorker из объекта навигатора? (. Так что выражение ('serviceWorker' in navigator) ложно)Как удалить свойство службыWorker из объекта навигатора?

delete не работает:

delete navigator.serviceWorker; 
'serviceWorker' in navigator; // true 

Присвоение undefined ничего не делает (даже если это было достаточно):

navigator.serviceWorker = null; 
'serviceWorker' in navigator; // true 
navigator.serviceWorker === null; // false 

Object.defineProperty также не работает:

Object.defineProperty(navigator, "serviceWorker", { 
    configurable: true, 
    value: undefined 
}); 
'serviceWorker' in navigator; // true 
navigator.serviceWorker === undefined; // true 

(Причина, чтобы сделать это, чтобы сделать новые браузеры ведут себя более как более старые браузеры для тестирования и т.д.)

ответ

0

navigator.serviceWorker поэтому свойство только для чтения неизменна проверки этого link

+0

Любопытно, что он * настраивается с помощью 'Object. *' Методов - вы можете установить свойство так, как хотите, вы просто не можете его удалить. – mjs

3

Если вы хотите сделать новые браузеры ведут себя как более старые браузеры для тестирования, вы можете определить и использовать новую функцию:

function areServiceWorkersSupported() { 
    return 'serviceWorker' in navigator; 
} 

, а затем, во время испытаний, вы можете переписать функцию.

+0

Я как бы надеялся, что можно будет сразу удалить кучу функций через нечто вроде противоположного полисполку, что позволит делать быстрые тесты с минимальными изменениями кода. 'delete window.fetch' действительно работает, но избавиться от некоторых других функций кажется трудным/невозможным. – mjs