Удалить теги <script> с помощью jQuery

Я хочу удалить этот блок Google Analytics, используя 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>

ПРИЧИНА

Потому что я создаю конвертер для чтения с экрана для jQuery на основе спецификации клиента. Это отслеживает Google Analytics.

ПРОБЛЕМА

Он работает с .remove(), пока вы не перейдете от него, а затем нажмите. Google Analytics висит.

Ответы

Ответ 1

Попробуйте следующее:

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

Надеюсь, что это поможет!

Ответ 2

Вы также можете зацепить файл document.write и проверить, не отличается ли его код anlytics от Google, прежде чем остановить его следующим образом:

<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

Итак, эта работа, как вы надеетесь. По крайней мере, я думаю, это будет:

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

Просто чтобы объяснить. Я просматриваю все теги script на странице. Если их свойство innerHTML имеет длину больше 0, тогда проверьте innerHTML script, и если я найду в нем строку var gaJsHost или var pageTracker. Затем я убеждаюсь, что я также не вижу в нем innerHTML, поскольку наш script, очевидно, будет иметь в нем. Если, конечно, у вас нет этого кода в script, загруженном на страницу с помощью src, и в этом случае этот script не будет иметь свойство свойства innerHTML, и вы можете изменить строку if только как

if (this.innerHTML.match(googleScriptRegExp))

Надеюсь, это то, что вы искали.

Ответ 4

Чтобы удалить элементы, jQuery('script:not([src^=http])').remove() будет работать.