使用Greasemonkey删除特定的javascript函数
我访问了一个在HTML头部有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
<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设置。您是否尝试了链接的代码?我就是这样写代码的:同样的问题: