remove appended script javascript

后端 未结 8 1640
执笔经年
执笔经年 2020-12-29 15:35

how can I remove my appended script because it causes some problems in my app.

This is my code to get my script

var nowDate = new Date().getTime();
v         


        
相关标签:
8条回答
  • 2020-12-29 15:53

    I did some more tests, and before you'll get a correct answer to your question (hope there is a one) you can try this:

    <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>
    

    This is just a test code, but it contains an idea, how you possible could solve the problem. It removes <sript> from the DOM, and the last line destroys all functionality of the script.

    (The code also has a little detail, which shows, that setTimeout will do eval(), no matter how it is argumented...?)

    0 讨论(0)
  • 2020-12-29 15:53

    easiest way.

    document.scripts.s16483498357511596685.remove();

    0 讨论(0)
  • 2020-12-29 15:55

    Well,
    I got the same need, because of ajax calls triggered by event. Some calls being the earliest may return later, then overwriting document populated by the last call.

    removeChild(scriptEl) doesn't work. Changing src attribute doesn't work either.

    If jsonp is your only way out, and if you have control of the server response, you can let those appended to discriminate return on the callback.

    Just pass a timestamp parameter, then check it on the callback

    //callback
    function dummy(res, ts) {
     if(YAHOO.util.Selector.query('script[id='scriptIdPrefix+ts+']').length>0) {
         do your job
     } else {
         do nothing
     }
    }
    
    //add script
    var scriptIdPrefix='myScriptId';
    function ajaxCall() {
        var timestamp = new Date().getTime();
        var scriptId = scriptIdPrefix+timestamp;
        //remove the previous script el
        s=YAHOO.util.Selector.query('script[id^='+scriptIdPrefix+']');
        if(s.length>0) {
            document.body.removeChild(s[0]);
        }
        var script = document.createElement('SCRIPT');
        script.id = scriptId;
        script.type = 'text/javascript';
        script.src = 'http://server/notify.js&callback=dummy&ts='+timestamp;
        document.body.appendChild(script);
    
    }
    

    Assemble the result of the server notify.js accordingly:

    dummy([{"datax":"x","datay":"y"}], 1369838562792)
    

    In this way you will have just one script element like this with parametric id

    <script id="myScriptId1369838562792" type="text/javascript"  
    src="http://server/notify.js?callback=dummy&ts=1369838562792"></script>
    
    0 讨论(0)
  • 2020-12-29 16:05

    Basically you can remove script tag by using a function similar to this one:

    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()
     }
    }
    

    Note, it use filename parameter to identify target script to remove. Also please note that target script could be already executed at the time you're trying to remove it.

    0 讨论(0)
  • 2020-12-29 16:08
    var flag1=0,flag2=0;
    $(window).resize(function(){
        if ($(window).width() < 480){
            flag1++;
            console.log(flag1);
            flag2=0;  
        }
        else 
            if($(window).width() > 480){
                flag2++;
                console.log(flag2);
                flag1=0;
            }   
        if(flag1==1){
            $("body").append("<script class='abc' src='custom.js'/>");
        }
        else
            if(flag2==1){
                $(".abc").remove();
            }
    });
    
    0 讨论(0)
  • 2020-12-29 16:09

    What you can do is remove the script immediately after it has been loaded:

    var nowDate = new Date().getTime();
    var url = val.redirect_uri + "notify.js?nocache=" + nowDate + "&callback=dummy";
    var script = document.createElement('script');
    script.src = url;
    script.onload = function( evt ) {
        document.body.removeChild ( this );
    }
    document.body.appendChild(script);
    

    Anyway I think it is a better idea to append the script to the header (where all the other scripts reside) than to the body.

    0 讨论(0)
提交回复
热议问题