在加载内容之前替换或删除另一个javascript标记

时间:2013-07-30 02:01:16

标签: javascript regex

在加载内容html之前,我需要为另一个脚本标记<script>替换特定的脚本标记<script>。我的意思是,我不想加载这个javascript,因为它是广告。

替换此 <script type='text/javascript' src='http://site.net/c/banner_s?tenant=AD&selection=5986&size=728x90&skin=bottom_middle&di=1'></script>

<script type='text/javascript' src='http://newsite...'></script>

否则删除标签。

这是我的代码,但这会删除所有脚本标记,我想要特定标记(之前提到过)

function stripScripts(s) {
    var div = document.createElement('div');
    div.innerHTML = s;
    var scripts = div.getElementsByTagName('script');
    var i = scripts.length;
    while (i--) {
      scripts[i].parentNode.removeChild(scripts[i]);
    }
    return div.innerHTML;
  }

alert(
 stripScripts('<span><script type="text/javascript">alert(\'foo\');<\/script><\/span>')
);

提前致谢

2 个答案:

答案 0 :(得分:2)

你知道多少网址?

如果你知道所有这一切并且它不会改变:

var scripts = document.getElementsByTagName('script');
var i = scripts.length;
while (i--) {
  if (scripts[i].src === "http://site.net/c/banner_s?tenant=AD&selection=5986&size=728x90&skin=bottom_middle&di=1") {
    srcipts[i].src = newSrc; // Your source here
    break;
  }
}

如果你知道其中一些不会改变:

var scripts = document.getElementsByTagName('script');
var i = scripts.length;
while (i--) {
  if (scripts[i].src.indexOf("http://site.net/c/banner_s?...") === 0)  {
    srcipts[i].src = newSrc; // Your source here
    break;
  }
}

如果整个网址可能会发生变化,您需要查看其他解决方案(ID,网页上的展示位置等)。

答案 1 :(得分:1)

如果这不是服务器端的javascript,那你就是在浪费时间。删除页面中的脚本元素是没有意义的。一旦加载了一个脚本,它就被加载了,你无法“卸载”它。除了导航到新网址之外,没有什么可以改变它。

替换脚本元素的src同样毫无意义,你也可以只加载一个新元素。替换src不会卸载脚本内容(参见上文),它只是删除元素。

如果要在页面中加载其他脚本,则必须在服务器上执行此操作。