Se si desidera riattivare i tag di script in un secondo momento, la mia soluzione è stata quella di interrompere l'ambiente del browser in modo che qualsiasi script eseguito generasse un errore abbastanza presto. Tuttavia, non è totalmente affidabile, quindi non puoi usarlo come funzione di sicurezza.
Se provi ad accedere alle proprietà globali, Chrome genererà un'eccezione.
setTimeout("Math.random()")
Sto sovrascrivendo tutte le proprietà sovrascrivibili window, ma potresti anche espanderlo per interrompere altre funzionalità.
window.allowJSExecution = inhibitJavaScriptExecution();
function inhibitJavaScriptExecution(){
var windowProperties = {};
var Object = window.Object
var console = window.console
var Error = window.Error
function getPropertyDescriptor(object, propertyName){
var descriptor = Object.getOwnPropertyDescriptor(object, propertyName);
if (!descriptor) {
return getPropertyDescriptor(Object.getPrototypeOf(object), propertyName);
}
return descriptor;
}
for (var propName in window){
try {
windowProperties[propName] = getPropertyDescriptor(window, propName)
Object.defineProperty(window, propName, {
get: function(){
throw Error("JavaScript Execution Inhibited")
},
set: function(){
throw Error("JavaScript Execution Inhibited")
},
configurable: true
})
} catch (err) {}
}
return function allowJSExecution(){
for (var propName in window){
if (!(propName in windowProperties)) {
delete windowProperties[propName]
}
}
for (var propName in windowProperties){
try {
Object.defineProperty(window, propName, windowProperties[propName])
} catch (err) {}
}
}
}