Remove <script> tags using jQuery

一笑奈何 提交于 2019-11-28 02:45:14

问题


I want to remove this Google Analytics block, using jQuery.

<script type="text/javascript">
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
    try {
        //var pageTracker = _gat._getTracker("xxx");
        pageTracker._trackPageview();
    } catch(err) {}
</script>

THE REASON

Because I am creating a bespoke screen reader convertor for jQuery based on a client specification. It's the Google Analytics that is bugging me.

THE PROBLEM

It works with .remove() until you navigate away, then press back. Google Analytics hangs.


回答1:


Try this:

var replacementDoneIn = $(document.body).text(); //remove Google Analytics document.write line
        var regExMatch = /document\.write\(unescape/g;
        var replaceWith = "//document.write";
        var resultSet = replacementDoneIn.replace(regExMatch, replaceWith);
        $("body").html(resultSet);

Hope that helps!




回答2:


You can also hook document.write and check if its google anlytics code before stopping it like this:

<script>
// Must run before google analytics though
old_document_write = document.write;
document.write = function(str)
{
     if(/* determine if the str is google analyic code */)
         return false; // dont write it
     else
        old_document_write(str);
}
</script>



回答3:


So this work as you hope. At least I think it will:

<script type="text/javascript">
    $(document).ready(function () {
        $("script").each(function () {
            if (this.innerHTML.length > 0) {
                var googleScriptRegExp = new RegExp("var gaJsHost|var pageTracker");
                if (this.innerHTML.match(googleScriptRegExp) && this.innerHTML.indexOf("innerHTML") == -1)
                    $(this).remove();
            }
        });
    });
</script>

Just to explain. I loop through all script tags on the page. If their innerHTML property has a length greater than 0 I then check the innerHTML of the script and if I find the string var gaJsHost or var pageTracker in it. I then make sure that I also don't see innerHTML in it as our script will obviously have these in it. Unless of course you have this code in a script loaded on the page using src in which case this script would not have an innerHTML property set and you can change the if line to just be

if (this.innerHTML.match(googleScriptRegExp))

Hope this is what you were looking for.




回答4:


To actually remove the elements, jQuery('script:not([src^=http])').remove() will work.



来源:https://stackoverflow.com/questions/3085710/remove-script-tags-using-jquery

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!