如何阻止 url 或 .js 文件在特定的 using greasemonkey 脚本上执行? (客户端)
How to block url or .js file execution on a specific using greasemonkey script? (client side)
我想用 greasemonkey/violentmonkey scrpit
阻止 javascript .js 在特定网站上加载
https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js
这是在 pagesource 上加载的脚本:
<script async="" crossorigin="anonymous" data-hljs-style="github-gist" integrity="sha384-TB2DTH77ndX7xwCHAtxD7BZqyn4r429ZSoGL7vcrb5x0bFSvLGAMoiriMUcIqeTu" onload="hljsLoader.highlightBlocks(this.parentNode)" src="https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js"></script>
这是 url 我想停止在网页上加载,因为它会使用语法高亮突出显示代码,我想停止语法高亮。
如果我在浏览器上使用 ublock origin 阻止它,它可以工作,但我想用 userscript 阻止它。
编辑:
我按照建议使用了脚本,但它不起作用,我做错了什么?
// ==UserScript==
// @name New script
// @namespace Violentmonkey Scripts
// @match *flarum.org*
// @include *flarum.org*
// @grant none
// @version 1.0
// @run-at document-start
// @author -
// @description 12/26/2020, 9:57:34 AM
// ==/UserScript==
const observer = new MutationObserver((mutations) => {
mutations.forEach(({ addedNodes }) => {
addedNodes.forEach((addedNode) => {
if (addedNode.nodeType === 1 && addedNode.matches('script') && addedNode.src === 'https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js') {
addedNode.remove();
observer.disconnect();
}
});
});
});
observer.observe(document.documentElement, { childList: true, subtree: true });
我是不是漏掉了什么?
这是我要 运行 上的 url 脚本
https://discuss.flarum.org/d/25739-disable-syntax-highlighting
下面的第二种方法通常有效,但由于某种原因,您的网页上似乎有某些东西干扰了它。一个丑陋的解决方法是提前在window上放一个空的hljs 属性,这样页面脚本在运行时认为它已经存在并且什么都不做:
window.hljsLoader = {};
您可以在页面加载开始时向文档添加一个 MutationObserver,并观察添加一个以 URL 作为 src 的脚本标签,然后将其删除。确保您使用的是 @run-at document-start
,然后执行:
const observer = new MutationObserver((mutations) => {
mutations.forEach(({ addedNodes }) => {
addedNodes.forEach((addedNode) => {
if (addedNode.nodeType === 1 && addedNode.matches('script') && addedNode.src === 'https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js') {
addedNode.remove();
observer.disconnect();
}
});
});
});
observer.observe(document.documentElement, { childList: true, subtree: true });
虽然脚本标签会暂时添加到 DOM,但在它有机会 运行.
之前,它会在观察者微任务中被删除
脚本运行的实时片段:
<script>
const observer = new MutationObserver((mutations) => {
mutations.forEach(({ addedNodes }) => {
[...addedNodes].forEach((addedNode) => {
if (addedNode.nodeType === 1 && addedNode.matches('script') && addedNode.src === 'https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js') {
console.log('Script tag addition intercepted and removed');
addedNode.remove();
observer.disconnect();
console.log('hljsLoader has not been loaded:', typeof hljsLoader);
}
});
});
});
observer.observe(document.documentElement, { childList: true, subtree: true });
</script>
<script async="" crossorigin="anonymous" data-hljs-style="github-gist" integrity="sha384-TB2DTH77ndX7xwCHAtxD7BZqyn4r429ZSoGL7vcrb5x0bFSvLGAMoiriMUcIqeTu" onload="console.log(hljsLoader)" src="https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js"></script>
如果有多个脚本,您将不得不循环遍历它们,而不是停在第一个脚本上:
console.log(typeof hljsLoader);
setTimeout(() => {
console.log(typeof hljsLoader);
}, 1000);
<script>
const observer = new MutationObserver((mutations) => {
mutations.forEach(({ addedNodes }) => {
[...addedNodes].forEach((addedNode) => {
if (addedNode.nodeType === 1 && addedNode.matches('script') && addedNode.src === 'https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js') {
console.log('Script tag addition intercepted and removed');
addedNode.remove();
console.log(typeof hljsLoader);
}
});
});
});
observer.observe(document.documentElement, { childList: true, subtree: true });
window.addEventListener('DOMContentLoaded', () => observer.disconnect());
</script>
<script async="" crossorigin="anonymous" data-hljs-style="github-gist" integrity="sha384-TB2DTH77ndX7xwCHAtxD7BZqyn4r429ZSoGL7vcrb5x0bFSvLGAMoiriMUcIqeTu" onload="console.log(hljsLoader)" src="https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js"></script>
<script async="" crossorigin="anonymous" data-hljs-style="github-gist" integrity="sha384-TB2DTH77ndX7xwCHAtxD7BZqyn4r429ZSoGL7vcrb5x0bFSvLGAMoiriMUcIqeTu" onload="console.log(hljsLoader)" src="https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js"></script>
我想用 greasemonkey/violentmonkey scrpit
阻止 javascript .js 在特定网站上加载https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js
这是在 pagesource 上加载的脚本:
<script async="" crossorigin="anonymous" data-hljs-style="github-gist" integrity="sha384-TB2DTH77ndX7xwCHAtxD7BZqyn4r429ZSoGL7vcrb5x0bFSvLGAMoiriMUcIqeTu" onload="hljsLoader.highlightBlocks(this.parentNode)" src="https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js"></script>
这是 url 我想停止在网页上加载,因为它会使用语法高亮突出显示代码,我想停止语法高亮。
如果我在浏览器上使用 ublock origin 阻止它,它可以工作,但我想用 userscript 阻止它。
编辑: 我按照建议使用了脚本,但它不起作用,我做错了什么?
// ==UserScript==
// @name New script
// @namespace Violentmonkey Scripts
// @match *flarum.org*
// @include *flarum.org*
// @grant none
// @version 1.0
// @run-at document-start
// @author -
// @description 12/26/2020, 9:57:34 AM
// ==/UserScript==
const observer = new MutationObserver((mutations) => {
mutations.forEach(({ addedNodes }) => {
addedNodes.forEach((addedNode) => {
if (addedNode.nodeType === 1 && addedNode.matches('script') && addedNode.src === 'https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js') {
addedNode.remove();
observer.disconnect();
}
});
});
});
observer.observe(document.documentElement, { childList: true, subtree: true });
我是不是漏掉了什么?
这是我要 运行 上的 url 脚本 https://discuss.flarum.org/d/25739-disable-syntax-highlighting
下面的第二种方法通常有效,但由于某种原因,您的网页上似乎有某些东西干扰了它。一个丑陋的解决方法是提前在window上放一个空的hljs 属性,这样页面脚本在运行时认为它已经存在并且什么都不做:
window.hljsLoader = {};
您可以在页面加载开始时向文档添加一个 MutationObserver,并观察添加一个以 URL 作为 src 的脚本标签,然后将其删除。确保您使用的是 @run-at document-start
,然后执行:
const observer = new MutationObserver((mutations) => {
mutations.forEach(({ addedNodes }) => {
addedNodes.forEach((addedNode) => {
if (addedNode.nodeType === 1 && addedNode.matches('script') && addedNode.src === 'https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js') {
addedNode.remove();
observer.disconnect();
}
});
});
});
observer.observe(document.documentElement, { childList: true, subtree: true });
虽然脚本标签会暂时添加到 DOM,但在它有机会 运行.
之前,它会在观察者微任务中被删除脚本运行的实时片段:
<script>
const observer = new MutationObserver((mutations) => {
mutations.forEach(({ addedNodes }) => {
[...addedNodes].forEach((addedNode) => {
if (addedNode.nodeType === 1 && addedNode.matches('script') && addedNode.src === 'https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js') {
console.log('Script tag addition intercepted and removed');
addedNode.remove();
observer.disconnect();
console.log('hljsLoader has not been loaded:', typeof hljsLoader);
}
});
});
});
observer.observe(document.documentElement, { childList: true, subtree: true });
</script>
<script async="" crossorigin="anonymous" data-hljs-style="github-gist" integrity="sha384-TB2DTH77ndX7xwCHAtxD7BZqyn4r429ZSoGL7vcrb5x0bFSvLGAMoiriMUcIqeTu" onload="console.log(hljsLoader)" src="https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js"></script>
如果有多个脚本,您将不得不循环遍历它们,而不是停在第一个脚本上:
console.log(typeof hljsLoader);
setTimeout(() => {
console.log(typeof hljsLoader);
}, 1000);
<script>
const observer = new MutationObserver((mutations) => {
mutations.forEach(({ addedNodes }) => {
[...addedNodes].forEach((addedNode) => {
if (addedNode.nodeType === 1 && addedNode.matches('script') && addedNode.src === 'https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js') {
console.log('Script tag addition intercepted and removed');
addedNode.remove();
console.log(typeof hljsLoader);
}
});
});
});
observer.observe(document.documentElement, { childList: true, subtree: true });
window.addEventListener('DOMContentLoaded', () => observer.disconnect());
</script>
<script async="" crossorigin="anonymous" data-hljs-style="github-gist" integrity="sha384-TB2DTH77ndX7xwCHAtxD7BZqyn4r429ZSoGL7vcrb5x0bFSvLGAMoiriMUcIqeTu" onload="console.log(hljsLoader)" src="https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js"></script>
<script async="" crossorigin="anonymous" data-hljs-style="github-gist" integrity="sha384-TB2DTH77ndX7xwCHAtxD7BZqyn4r429ZSoGL7vcrb5x0bFSvLGAMoiriMUcIqeTu" onload="console.log(hljsLoader)" src="https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.16/loader.min.js"></script>