【问题标题】:Javascript to replace all external linksJavascript替换所有外部链接
【发布时间】:2013-03-19 16:12:45
【问题描述】:

我想要实现的是在页面加载时替换所有外部链接。

以原始url为例:

http://microsoft.com/faq become newurl

应该改为:

http://redirect.com/?url=http://microsoft.com/faq 

我尝试了在 Google 上找到的不同解决方案,但似乎没有什么对我有用。

我想我在这里找到了解决方案:http://jsfiddle.net/eK7XW/

【问题讨论】:

  • 这个问题似乎有邪恶的意图/垃圾邮件发送者。
  • 如果您将您的标记提供给我们,帮助您会容易得多。
  • 使用document.getElementsByTagName("a");for 循环迭代找到的元素。在循环内,检查href 的域是否不是您的域。如果是这样,请将href 属性替换为http://redirect.com/?url= + 原始href
  • 布拉德 M,找个终身伴侣。你认为我拥有 ms.com 或 redirect.com? :D
  • 不,Ivan,我怀疑有人认为您拥有其中任何一个域,但可以更改示例。就个人而言,我不在乎你如何处理这些信息。没有人会用这么简单的脚本入侵我的网站。

标签: javascript url hyperlink


【解决方案1】:

已编辑以检查内部域:

function isExternal(link, domain) {
    var re = /http(s?):\/\/([\w]+\.){1}([\w]+\.?)+/;
    return re.exec(link)[0] === domain;
}

var SITE = "http://redirect.com/?url=";
var INTERNAL_DOMAIN = "http://www.yourdomain.com";
var links = document.getElementsByTagName("a");
for (var i=0; i<links.length; i++) {
    if (isExternal(links[i].href), INTERNAL_DOMAIN) {
        links[i].href = SITE + links[i].href;
    }
}

如果您需要检查子域或不指定内部域,我相信代码很容易适应。

【讨论】:

  • 这里不检查链接是外部的还是内部的
  • 我也将使用这种和平的代码,但用于其他目的。感谢您的关注!
  • 响应 Ian,只需添加一个 indexOf 检查“http://”或内部域字典,这个脚本就可以正常工作。
  • @iGanja 不,不是。 http:// 不是域,对此没有帮助。并且必须正确/准确地解析和检查 href 属性才能成为完整的解决方案。所有这些显示的是如何循环 &lt;a&gt; 元素,这很重要,但对于 OP 来说是不完整的
  • 我没有,这就是我提供两种解决方案的原因。对不起,如果我希望 SO 上的人有一些知识。如果我要给出一个完整的解决方案,我会写一个答案,而不仅仅是评论。
猜你喜欢
  • 2010-09-22
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 2012-04-21
  • 2023-03-29
  • 2015-12-31
  • 2017-04-11
  • 1970-01-01
相关资源
最近更新 更多