Javascript 通过删除脚本标记来取消动态脚本不会';我不能在FF工作

Javascript 通过删除脚本标记来取消动态脚本不会';我不能在FF工作,javascript,firefox,dynamic,Javascript,Firefox,Dynamic,我通过创建一个脚本标记,设置其源,然后将标记添加到DOM来添加动态脚本。它按预期工作,脚本正在下载并执行。但是,有时我希望在下载脚本之前取消脚本执行。因此,我通过从DOM中删除脚本标记来实现这一点 在IE9、Chrome和Safari中,它按预期工作——在从DOM中删除脚本标记后,它不会执行 但是,它在Firefox中不起作用-脚本执行即使我将其从DOM中删除或将其src更改为“”或我尝试过的任何其他操作,我也无法在脚本添加到DOM后停止脚本的执行。有什么建议吗? 谢谢 某种回调安排怎么样?与其

我通过创建一个脚本标记,设置其源,然后将标记添加到DOM来添加动态脚本。它按预期工作,脚本正在下载并执行。但是,有时我希望在下载脚本之前取消脚本执行。因此,我通过从DOM中删除脚本标记来实现这一点

在IE9、Chrome和Safari中,它按预期工作——在从DOM中删除脚本标记后,它不会执行

但是,它在Firefox中不起作用-脚本执行即使我将其从DOM中删除或将其src更改为“”或我尝试过的任何其他操作,我也无法在脚本添加到DOM后停止脚本的执行。有什么建议吗?
谢谢

某种回调安排怎么样?与其让动态添加的脚本在加载时自行执行,不如让它在主脚本中调用一个函数来决定是否继续。您可以让主脚本的函数简单地返回true或false(执行/不执行),或者它可以接受一个回调函数作为参数,这样它就可以准确地决定何时启动动态脚本——这样,如果您有多个动态脚本,主脚本就可以等待它们全部加载,然后按特定顺序执行它们

在主脚本JS中:

function dynamicScriptLoaded(scriptId,callback) {
   if (scriptId === something && someOtherCondition())
      callback();
   // or store the callback for later, put it on a timeout, do something
   // to sequence it with other callbacks from other dynamic scripts,
   // whatever...
}
在动态添加的脚本中:

function start() {
   doMyThing();
   doMyOtherThing();
}

if (window.dynamicScriptLoaded)
   dynamicScriptLoaded("myIdOrName",start);
else
   start();
动态脚本检查是否定义了dynamicScriptLoaded()函数,希望它在主脚本中(可以将其升级到更健壮的测试,即检查dynamicScriptLoaded实际上是一个函数)。如果定义了它,它将调用它,并传递回调函数。如果没有定义它,它会假定可以继续执行它自己——或者您可以在那里放置任何您喜欢的回退功能

更新:我更改了上面的
if
测试,因为如果函数不存在,
if(dynamiccriptLoaded)
将给出一个错误,而
if(window.dynamiccriptLoaded)
将工作。假设函数是全局的——显然,如果使用名称空间方案,这可能会发生变化


在我最初发布这个答案的那一年里,我意识到允许您在不执行脚本的情况下加载脚本,因此它应该能够处理下面评论中提到的blankSlate情况。yepnope.js只有1.7kb。

谢谢!是的,如果我可以动态地更改我正在加载的脚本,我肯定会使用这种方法来更好地控制脚本是否执行以及如何执行。但是,我在这个场景中的限制是,我不能更改动态脚本或向它们添加任何检查。@blankSlate-除了不引用动态脚本之外,我没有任何其他建议,除非您100%确定要执行它,并且不需要取消。虽然我想知道为什么在脚本已经开始下载之后,您需要取消它。我的意思是,脚本是否太大,以至于用户有时间在它仍在下载时采取一些行动,然后你想取消它?