2015-12-15 70 views
0

我有一个文件,我正在作为一个更大的网站的一部分。很多脚本都是自动加载的,但有一个是破坏的,我不知道它是如何包含的。我无法删除它,因为它在其他地方(它确实是事件监听器)是需要的,但是对于我正在运行的其他代码而言,它没有任何作用,导致无意义的页面刷新,从而导致用户的工作无效(然后,仅在铬)。关闭javascript中的脚本?

为此,有没有在javascript中关闭另一个源脚本,然后再打开它的方法?

我没有修改目标脚本本身的选项,也没有将它从最初包含在文档中。

+1

不,谢谢。你可以做的事情不多。 –

+1

你可以控制脚本加载的顺序吗? – Bioto

+0

@Bioto不幸的是,没有。 – liljoshu

回答

2

排序... ...

你可以在任何JavaScript方法总是存储在变量中,代替它的实现,做自己的东西,终于恢复了。

从您的问题,目前还不清楚这是否可能是您的问题的解决方案,我只是提到这一点,因为所有的“不可能”的评论。

https://jsfiddle.net/3grfL30s/

function alertSomething(cp){ 
    alert("TEST: " + cp); 
} 


alertSomething(1); 
// from here i dont want alerts, no matter what code is calling the method 
// backup method to "x" to restore it later. 
var x = alertSomething; 
alertSomething = function(){} //overwrite alertSomething to do nothing 

//do my work, verify alertSomething is doing nothing 
alertSomething(2); 

//restore alert method 
alertSomething = x; 

//verify its working agian 
alertSomething(3); 

这将产生警报13,即使2会被同时执行beeing你的代码中调用。

对于更复杂的方法或非布尔执行条件时,代理模式用额外“标志”可以是有用的(实施例仍然布尔型,但也可能有多个条件):

https://jsfiddle.net/3grfL30s/1/

function alertSomething(cp){ 
    alert("TEST: " + cp); 
} 

var doIt = 1; 
var originalAlert = alertSomething; 
alertSomething = function(cp){ 
    if (doIt){ 
    return originalAlert.apply(this, arguments); 
    } 
} 

alertSomething(1); 
// in here i dont want alerts 
doIt = 0; 

//do my work, verify alertSomething is doing nothing 
alertSomething(2); 

//restore alert method 
doIt = 1; 

//verify its working agian 
alertSomething(3); 
+0

谢谢,这是迄今为止我见过的最好主意。没有完全解决我的问题,但绝对让我更近一步。谢谢! – liljoshu