使用Greasemonkey删除特定的javascript函数

使用Greasemonkey删除特定的javascript函数,javascript,greasemonkey,Javascript,Greasemonkey,我访问了一个在HTML头部有javascript文件的网站 <script>(function(d){var config={kitId:'gpn1wjb',scriptTimeout:3000,async:true},h=d.documentElement,t=setTimeout(function(){h.className=h.className.replace(/\bwf-loading\b/g,"")+" wf-inactive";},config.scriptTimeou

我访问了一个在HTML头部有javascript文件的网站

<script>(function(d){var config={kitId:'gpn1wjb',scriptTimeout:3000,async:true},h=d.documentElement,t=setTimeout(function(){h.className=h.className.replace(/\bwf-loading\b/g,"")+" wf-inactive";},config.scriptTimeout),tk=d.createElement("script"),f=false,s=d.getElementsByTagName("script")[0],a;h.className+=" wf-loading";tk.src='//use.typekit.net/'+config.kitId+'.js';tk.async=true;tk.onload=tk.onreadystatechange=function(){a=this.readyState;if(f||a&&a!="complete"&&a!="loaded")return;f=true;clearTimeout(t);try{Typekit.load(config)}catch(e){}};s.parentNode.insertBefore(tk,s)})(document);</script>
(函数(d){var config={kitId:'gpn1wjb',scriptTimeout:3000,async:true},h=d.documentElement,t=setTimeout(函数(){h.className=h.className.replace(/\bwf-load\b/g,”+“wf-inactive”;},config.scriptTimeout),tk=d.createElement(“脚本”),f=false,s=d.getElementsByTagName(“脚本”)[0],a;h.className+=“wf-load”;tk.src='//use.typekit.net/'+config.kitId+'.js';tk.async=true;tk.onload=tk.onreadystatechange=function(){a=this.readyState;if(f | a&&a!=“complete”&&a!=“loaded”)返回;f=true;cleartimout(t);尝试{typekit.load(config)}catch(e){};s.parentNode.insertBefore(tk,s)}(文档);

如何使用Greasemonkey禁用/删除/替换此功能?

没有标准的方法来处理此问题。要禁用的函数将在浏览器读取该部分HTML时立即执行,这意味着您无法从tampermonkey中删除脚本节点,即使您在文档加载开始时运行userscript(使用
@run at document start

但是,您可以尝试利用他们调用
setTimeout
的事实。这样做的目的是在调用时抛出一个错误,这样他们的代码片段就不能正常运行

代码应该是这样的。确保您正在访问未装箱的
窗口
对象

const oldSetTimeout = window.setTimeout;
// replace setTimeout with our hacked version
window.setTimeout = newSetTimeout;
/**
 *
 * @param {function} cb
 * @param {number} delay
 */
function newSetTimeout(cb, delay) {
    // Check if callback contains string we know from the sourcecode
    if (cb && cb.toString().indexOf("bwf-loading")!=-1) {
        // misdeed done, restore normal setTimeout
        window.setTimeout = oldSetTimeout;
        throw new Error("Failing set timeout to kill unwanted script.");
    }
    // otherwise act as normal setTimeout
    else {
        return oldSetTimeout.call(window, arguments);
    }
}

@brock adams你能帮我吗?dosen不起作用,这里有一个示例页面:30秒后func仍然工作ID你确保代码在文档开始时正确执行?这有一个greasemonkey设置。您是否尝试了链接的代码?我就是这样写代码的:同样的问题: