0

该脚本由主机自动加载到我的网站上:

<!-- [redacted] Analytics Code -->
<script type="text/javascript" src="http://[redacted]/count.php"></script>
<!-- End Of Analytics Code -->

它没有任何标识标签,如 id、name 或 class,所以我的问题是“如果没有这些东西,我将如何使用 javascript 更改它的 src?”。我想让 src 为空,因为它降低了我的网站速度。这将是目标:

<script type="text/javascript" src=""></script>

甚至删除整个脚本标签也是可以接受的。

4

3 回答 3

0

正如 sLaks 提到的那样,即使您更改脚本标签的 src 属性,它也无济于事。相反,我建议在您的第一个脚本文件中存储整个代码,只需确保您具有如下所示的模块模式

var yourModule = (function(){
    function yourModule(){
       ...
    }
    //your helper functions here
    function somehelper(){
        ....
    }
    yourModule.prototype.someFun1 = function(){ .. };
    yourModule.prototype.someFun2 = function(){ .. };
    return yourModule;
}());

仅举一个例子,我采用了这种模式。优点是如果您想禁用整个脚本,因为仅更改脚本不起作用

var xyz= new yourModule();
// start using xyz
// When you do not want yourModule anymore  
yourModule = function(){ return false; } or null;

将清除该功能。

然后使用以下代码再次加载您的脚本

 var handleRequest = function( ) { //!! set up the handleRequest callback

 if(this.status != undefined) {

     /* do something with the status code here */

 }

 if(this.readyState == 4) {

      var script = document.createElement("script") ;
          script.setAttribute("type","text/javascript") ;
      var text = document.createTextNode(this.responseText) ;
          script.appendChild(text) ;

      var head = document.getElementsByTagName("head")[0] ;
          head.insertBefore(script,head.firstChild) ;

 }

 } ;

 var request ; //!! supposing you have a way to get a working XHR Object

 //.. set the XHR Object

 request.open("GET",url,true) ;
 request.overrideMimeType("text/javascript") ;
 request.onreadystatechange = handleRequest ;
 request.send(null) ;

脚本加载由不同的专家在不同的问题中多次回答,如果您想通过 AJAX 加载它,这是我喜欢的解决方案(来自:动态创建脚本:readyState 永远不会“完成”

于 2013-08-20T03:26:03.730 回答
0
document.getElementsByTagName("script")[0].src = "location";

因为document.getElementsByTagName("script")返回所有脚本标签的数组,您可以使用括号通过索引号选择哪一个

于 2013-08-20T02:51:35.687 回答
0

要删除它:

var myScript = document.getElementsByTagName("script")[0]; // or whatever index
myScript.parentNode.removeChild(myScript); // bye bye

但 SLaks的可能是对的:

那不会有帮助的。当你的 JS 运行时,浏览器已经下载并执行了该脚本。

于 2013-08-20T02:54:04.527 回答