Lonely Researcher, Prof. Dr. Geek He has been challenging advanced technology research in academia, education for young people and technology funding by the unique IT technologies for bright future of mankind.
*
* Again: this will **not** prevent inline script, e.g.:
* .
*
* This workaround is possible because Safari supports the non-standard 'beforeload' event.
* This allows us to trap the module and nomodule load.
*
* Note also that `nomodule` is supported in later versions of Safari - it's just 10.1 that
* omits this attribute.
* -->
*/
(function () {
const check = document.createElement('script');
if (!('noModule' in check) && 'onbeforeload' in check) {
let support = false;
document.addEventListener(
'beforeload',
(e) => {
if (e.target === check) {
support = true;
} else if (!e.target.hasAttribute('nomodule') || !support) {
return;
}
e.preventDefault();
},
true,
);
check.type = 'module';
const blob = URL.createObjectURL(
new window.Blob([], { type: 'text/javascript' }),
);
check.src = blob;
check.onload = () => {
URL.revokeObjectURL(blob);
};
document.head.appendChild(check);
check.remove();
}
})();