为什么与textContent链接不起作用

时间:2018-03-07 17:53:06

标签: javascript jquery apache rest websocket

最近,我建了一个聊天室。输入textarea的内容的链接造成了一些麻烦。

 if(!String.linkify) {
            String.prototype.linkify = function() {

                // http://, https://, ftp://
                var urlPattern = /\b(?:https?|ftp):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*[a-z0-9-+&@#\/%=~_|]/gim;

                // www. sans http:// or https://
                var pseudoUrlPattern = /(^|[^\/])(www\.[\S]+(\b|$))/gim;

                // Email addresses
                var emailAddressPattern = /[\w.]+@[a-zA-Z_-]+?(?:\.[a-zA-Z]{2,6})+/gim;

                return this
                    .replace(urlPattern, '<a href="$&">$&</a>')
                    .replace(pseudoUrlPattern, '$1<a href="http://$2">$2</a>')
                    .replace(emailAddressPattern, '<a href="mailto:$&">$&</a>');
            };
        }
  1. 问题:聊天记录中的链接未转换,但显示为纯字符串。
  2. 问题:链接包含隐藏字符â€https://www.link.com/product/ABC/myaffiliatelink 当我调用结果链接时,我收到了以下浏览器通知:
  3.   Not Found
        The requested URL â£https://www.link.com/product/ABC/myaffiliatelink was not found on this server.
    

    要获取消息,我使用:

    textContainer.textContent = message.linkify();
    

    有人可以解释会发生什么以及如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

在思考并玩了一段时间后,我得到了答案。当我使用

textContainer.textContent = message.linkify();

我将结果定义为纯字符串。因此,我的linkify函数添加了诸如<a href="">之类的html元素,然后被解释为字符串,因此失败。

解决方案是将呼叫更改为

textContainer.innerHTML = message.linkify();

因此,元素被解释为html元素并且可以扩展。 有关innerHTML和textContent之间差异的更多信息可以找到here

最好的问候,乔。