Если вы запускаете свой скрипт пользователя при запуске документа, возможно, страница еще не загружена - тэги не будут удалены.
Если вы запустите свой скрипт пользователя нормально, страница уже будет загружена - скрипт теги, скорее всего, уже будут запущены.
Если вы хотите убедиться, что на странице не выполняется ни один из собственных сценариев, присоедините MutationObserver ко всему документу в начале загрузки страницы, и когда тег сценария добавил, удали его. Микрозадача, во время которой запускается MutationObserver, будет до . Запустится содержимое скрипта:
<script>
// Example userscript code
const observer = new MutationObserver((mutations) => {
for (const { addedNodes} of mutations) {
for (addedNode of addedNodes) {
if (addedNode.nodeType === 1 && addedNode.tagName === 'SCRIPT') {
console.log('script removed');
addedNode.remove();
}
}
}
});
observer.observe(document.documentElement, { childList: true, subtree: true });
</script>
<script>
console.log('Example page script running');
</script>
<div>
Content
<script>
console.log('Example nested page script running');
</script>
</div>
Убедитесь, что ваш пользовательский скрипт запускается с мгновенным внедрением скрипта и document-start
, чтобы обеспечить выполнение до того, как что-либо на странице существует. (Если страница может получить скрипт до запуска вашего пользовательского скрипта, она может делать все, что захочет)