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) {}
}
}
}