使用jQuery </script>删除<script>标记

时间:2010-06-21 14:51:31

标签: javascript jquery html script-tag

我想使用jQuery删除此Google Analytics块。

<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创建一个定制的屏幕阅读器转换器。谷歌分析是困扰我的。

问题

它适用于.remove(),直到您离开,然后按回。谷歌分析挂起。

4 个答案:

答案 0 :(得分:7)

试试这个:

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

希望有所帮助!

答案 1 :(得分:2)

你也可以挂钩document.write并检查它的谷歌分析代码是否会像这样停止:

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

答案 2 :(得分:1)

所以这项工作正如你所希望的那样。至少我认为它会:

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

只是解释一下。我遍历页面上的所有脚本标签。如果他们的innerHTML属性的长度大于0,那么检查脚本的innerHTML,如果我在其中找到字符串var gaJsHost或var pageTracker。然后我确保我也没有看到innerHTML,因为我们的脚本显然会有这些内容。除非您在使用src在页面上加载的脚本中使用此代码,否则此脚本将不会设置innerHTML属性,您可以将if行更改为

if (this.innerHTML.match(googleScriptRegExp))

希望这就是你要找的东西。

答案 3 :(得分:0)

要实际删除元素,jQuery('script:not([src^=http])').remove()将起作用。