3

在加载内容 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>')
);

提前致谢

4

2 回答 2

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

如果整个 url 可能发生变化,您将需要寻找不同的解决方案(id、页面上的位置等)。

于 2013-07-30T02:36:40.677 回答
1

如果这不是服务器端 javascript,那么您就是在浪费时间。一旦脚本元素出现在页面中,就将其删除是没有意义的。一旦脚本被加载,它就被加载了,你不能“卸载”它。除了导航到新 URL 之外,您无能为力。

替换脚本元素的 src 同样没有意义,你还不如只加载一个新元素。替换 src 不会卸载脚本内容(见上文),它只是删除元素。

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

于 2013-07-30T03:03:21.160 回答