删除附加的脚本javascript

Rob*_*tan 5 javascript append appendchild createelement

如何删除附加的脚本,因为它会导致我的应用程序出现问题.

这是我获取脚本的代码

var nowDate = new Date().getTime();
var url = val.redirect_uri + "notify.js?nocache=" + nowDate + "&callback=dummy";
var script = document.createElement('script');
script.src = url;
document.body.appendChild(script);
Run Code Online (Sandbox Code Playgroud)

然后我有一个自动加载功能,导致创建另一个元素脚本.

我想摆脱添加另一个元素之前附加的前一个元素.

Pav*_*sky 11

基本上你可以使用类似于这个的函数删除脚本标记:

function removeJS(filename){
 var tags = document.getElementsByTagName('script');
 for (var i = tags.length; i >= 0; i--){ //search backwards within nodelist for matching elements to remove
  if (tags[i] && tags[i].getAttribute('src') != null && tags[i].getAttribute('src').indexOf(filename) != -1)
   tags[i].parentNode.removeChild(tags[i]); //remove element by calling parentNode.removeChild()
 }
}
Run Code Online (Sandbox Code Playgroud)

注意,它使用filename参数来标识要删除的目标脚本.另请注意,目标脚本可能已在您尝试删除时执行.


Jam*_*ill 5

我只是检查你是否已经添加了脚本.添加然后删除会增加不必要的复杂性.这样的事情应该有效:

var scriptAdded = false;

if(scriptAdded == false) {
    document.body.appendChild(script);
    scriptAdded = true;
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,这是一个JSONP电话.我认为这不能解决我的问题. (3认同)
  • 也许OP添加的脚本是JSONP调用? (2认同)

Tee*_*emu 3

我做了更多测试,在您得到问题的正确答案(希望有一个)之前,您可以尝试以下操作:

<button onclick="foo()">ShowHTML</button>
<script>
(function foo(){
    var b=function moo(){
        var c=document.getElementsByTagName('script');
        alert(document.body.innerHTML);
        c[0].parentElement.removeChild(c[0]);
        alert(document.body.innerHTML);
    }
    var a=setTimeout(b,1000);
    b=null;
})();
foo=null;
</script>
Run Code Online (Sandbox Code Playgroud)

这只是一个测试代码,但它包含一个想法,即如何解决问题。它<sript>从 DOM 中删除,最后一行破坏了脚本的所有功能。

(代码还有一个小细节,它表明,无论如何论证,都可以......?setTimeouteval()