【问题标题】:Find and Replace for Javascript, to change link, is it possible?查找和替换 Javascript,更改链接,可以吗?
【发布时间】:2014-01-11 03:54:45
【问题描述】:

好的,这是我的问题:我有一个看起来像这样的谷歌分析代码:

<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-xxxxxxx-x']);
_gaq.push(['_trackPageview']);
(function() {
    var ga = document.createElement('script');
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(ga, s);
})();
</script>

我想替换这一行:

ga.src = ('https:' == document.location.protocol ? 'https://' : 'http:/') + '.google-analytics.com/ga.js'

用这一行:

ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js'

但我无法编辑原始代码,我只能添加它。有没有办法创建一个以某种方式找到并替换这一行的代码?

请帮忙,

灰色

【问题讨论】:

  • 请注意javajavascript 是两个完全不同的东西。
  • 您是想直接在浏览器中增加脚本还是可以访问服务器部分?
  • 为什么可以添加但不能编辑代码?
  • 我很同情做这个'https:' == document.location.protocol ? 'https://' : 'http:/'而不是这个document.location.protocol + '//'的人
  • 嗯。为什么不能修改脚本?即使您尝试替换 src,该脚本也会触发。然后只需“更改” src,双击不会突然触发。

标签: javascript replace hyperlink find


【解决方案1】:

如何将修改后的脚本置于当前脚本之上,然后压制现有脚本?像这样:

<script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-xxxxxxx-x']);
    _gaq.push(['_trackPageview']);
    (function() {
        var ga = document.createElement('script');
        ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js';
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(ga, s);
    })();
</script>
<script type='application/x-suppress'>
<script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-xxxxxxx-x']);
    _gaq.push(['_trackPageview']);
    (function() {
        var ga = document.createElement('script');
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(ga, s);
    })();
</script>

【讨论】:

  • 我喜欢这个想法,但不幸的是我只能在代码后添加
  • 啊好吧,我有另一个想法。我会发布它。
  • 如果您不需要那个 _gaq 变量,只需删除自调用匿名函数上方的那三行即可。
  • 所以抑制应用程序,我理解它会抑制,但它是否只抑制该脚本的功能?如果是这样,我可以删除我添加的代码的变量,因为它们与已经存在的变量相同,只需替换函数吗?你说的是这个吗?
  • 它抑制了整个脚本,包括函数和变量。因此,如果您仍然需要该变量,请将其保存在您的脚本中。如果不是,那么无论如何都没有真正的原因。您可以直接插入脚本:&lt;script src="http://stats.g.doubleclick.net/dc.js"&gt;&lt;/script&gt;(后跟&lt;script type='application/x-suppress'&gt;
【解决方案2】:

另一个不需要您注意脚本索引的选项如下(注意新脚本有一个 id):

<script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-xxxxxxx-x']);
    _gaq.push(['_trackPageview']);
    (function() {
        var ga = document.createElement('script');
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(ga, s);
    })();
</script>
<script id="scriptFixer" type="text/javascript">
    var scripts = document.getElementsByTagName('script');
    var scriptCount = scripts.length;
    var regex = new RegExp('.google-analytics.com/ga.js');
    for (var i = scriptCount - 1; i >= 0; i--) {
        var script = scripts[i];
        if (script.id !== 'scriptFixer' && (script.innerHTML.match(regex) !== null || script.src.match(regex) !== null)) {
            script.remove();
        }
    }
    var _gaq = [];
    _gaq.push(['_setAccount', 'UA-xxxxxxx-x']);
    _gaq.push(['_trackPageview']);
    (function() {
        var ga = document.createElement('script');
        ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js'
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(ga, s);
    })();
</script>

【讨论】:

  • 嘿迈克。好的,我又看了一遍,我错了。我只能在该行之前而不是之后添加代码。我正在尝试您的抑制代码,但它似乎不起作用。我可以添加另一行来忽略下一个带有旧行的脚本吗?
  • 好吧,让我澄清一下,我已经运行了您提供的抑制行,我相信它确实抑制了脚本,因为在第 0 个脚本中创建的行现在是正确的.当我在控制台中运行 document.getElementsByTagName('script') 时,第 0 个脚本现在是:[ ​ ,但是当我运行谷歌标签助手时,它仍然显示为 2 个分析标签,并对包含 _gaq 和 _gat 变量的 2 个脚本发出警告。不是压制变量吗?
  • 看起来我确实为那个答案放了脚本……我现在会解决这个问题 - 这可能是它不起作用的原因吗?它适用于 Chrome、Firefox、Opera 和 Safari。我目前无法访问 IE...
  • 是的,这些变量仍然会显示,因为它们也在您的脚本中。好吧,至少 _gaq 是,但你可以删除它。例如:删除_gaq;
  • 是在抑制行之后还是之前抑制脚本?
【解决方案3】:

这个呢:

<script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-xxxxxxx-x']);
    _gaq.push(['_trackPageview']);
    (function() {
        var ga = document.createElement('script');
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(ga, s);
    })();
</script>
<script type="text/javascript">
    document.getElementsByTagName('script')[0].remove();
    document.getElementsByTagName('script')[0].remove();
    var _gaq = [];
    _gaq.push(['_setAccount', 'UA-xxxxxxx-x']);
    _gaq.push(['_trackPageview']);
    (function() {
        var ga = document.createElement('script');
        ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js'
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(ga, s);
    })();
</script>

【讨论】:

  • 麦克你太棒了,让我们谈谈这个,因为我是初学者,你能解释一下这个概念吗?好像有命令删除之前的脚本,然后替换掉?
  • 哦,还有,这是否足以仅删除该脚本或删除其他脚本?
  • 当然,该命令获取所有脚本标签(一个数组),然后获取数组中的第一个元素并将其删除。由于您提供的脚本将 google 分析脚本放在第 0 个脚本之前,因此第一次调用将删除该 google 分析脚本。第二次调用假定您提供的脚本是页面上的第一个脚本(现在又是第 0 个),然后删除该脚本。情况可能并非如此......
  • 它将删除您提供的索引中的任何脚本。如果您在页面加载时在浏览器中打开控制台并运行命令 document.getElementsByTagName('script') 您应该会看到一个包含页面上所有脚本的数组。
  • 嘿,迈克,我运行了上面的命令来检查脚本,看起来你是对的,分析代码在第 0 个脚本之前,然后还有一些其他脚本。具有分析代码的脚本是第 4 个脚本。所以第一个调用负责 0 之前的分析,但我现在如何调用要删除和替换的第 4 个脚本?
猜你喜欢
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 2013-08-04
  • 1970-01-01
  • 2021-06-01
  • 2016-03-04
  • 1970-01-01
相关资源
最近更新 更多