自定义javascript将信息附加到网址修改

时间:2016-12-14 20:51:01

标签: javascript html

我们在旧的过时的本地学校网络上构建页面,下面的JavaScript会自动添加到所有页面。 没有人确定脚本在哪里以及如何附加到页面上,并且设置它的人已经很久了。在事情更新之前(谁知道什么时候 - 假设即将到来的夏天),需要一些建议。

我尝试做的是修改脚本,以免某些链接受到影响。换句话说,标准< a href>链接使用脚本,但选择/ tadded不使用。

寻找标记某些链接以阻止脚本修改的方法。

		var links = document.links;
		var thisHost = location.host;
		var i = links.length;

		while (i--) {

			if (links[i].href.slice(-1) == "#" || links[i].getAttribute("href").slice(0, 3) == "../") {
				continue;
			}

			links[i].href = "local://" + (links[i].href);

		}
<a href="http://google.com">Google</a>

任何意见都表示赞赏。我已经用尽所有解决方案......

3 个答案:

答案 0 :(得分:2)

在锚标记中添加class属性,在新的脚本代码中使用CSS选择器查找这些链接并进行修改。

您需要确定何时执行javascript,onLoad或onDocumentReady,但这应该适合您。

<强> HTML

<a href="http://tempuri.org">Static URI</a><br>
<a class="update" href="http://tempuri.org">URI To Update</a><hr>
<input type="button" onclick="runme()" value="update links">

<强>的Javascript

function runme() {
 var elements = document.querySelectorAll('a.update');
 elements.forEach( function(element) {
  element.setAttribute('href','http://www.google.com');
  element.innerHTML = 'Updated to Google.com';
 });
}

https://jsfiddle.net/ued2a29y/3/

答案 1 :(得分:2)

该脚本会跳过以#结尾的链接,因此如果链接中没有#,您可以在其末尾添加一个。如果您找到该脚本,您也可以修改它以跳过具有特定类的链接,EG。

if (links[i].className.match('\bskip-modify\b') || links[i].href.slice(-1) == "#" || ...

找到它应该不会太难。查看Web服务器配置以查看请求路由到的位置并读取该代码以查看脚本如何插入(或者可能是由Web服务器直接插入)。或者只是grep 'document\.links' -R *

否则,您可以添加一个在DOM准备就绪后运行的脚本(如果另一个脚本插入到您的下面),并撤消该脚本对“skip-modify”类链接所做的操作:

!function ( ) {

    if ( document.addEventListener ) {
       document.addEventListener("DOMContentLoaded", undoLinkModifications );
    } else {
      document.attachEvent("onreadystatechange", function(){
        if (document.readyState === "complete"){
          document.detachEvent( "onreadystatechange", arguments.callee );
          undoLinkModifications( );
        }
      });
    }

    function undoLinkModifications ( ) {
        var els = document.querySelectorAll( '.skip-modify' );
        for ( var i = 0; i < els.length; i++ ) {
            els[i].href = els[i].href.replace( /^local:\/\//, '' );
        }
    }

}();

JSFiddle

答案 2 :(得分:1)

您拥有的自动附加脚本会绕过以#结尾的链接。利用这些知识,您可以解决标记问题。更新如下。

1。 HTML标记

对于您不希望将URL更改为本地的所有锚点,请将href属性设置为#,使用类nonlocal标记,并设置您希望它们在数据中具有的真实URL属性。

<a href="#" class="nonlocal" data-href="http://www.REAL-URL-GOES-HERE.com">Nonlocal Anchor</a>

2。的JavaScript

在页面末尾附加以下JavaScript,它应该处理#与真实网址的所有替换。

(function() {
    // get all tagged links
    var anchors = document.querySelectorAll('a.nonlocal');

    // set their real URL
    anchors.forEach(function(anchor) {
        anchor.setAttribute('href', anchor.datasets.href);
    });
})();

3。享受!