为啥用 textContent 链接不起作用

Posted

技术标签:

【中文标题】为啥用 textContent 链接不起作用【英文标题】:Why linkify with textContent does not work为什么用 textContent 链接不起作用 【发布时间】:2018-03-07 17:53:06 【问题描述】:

最近,我建立了一个聊天室。输入文本区域的内容的链接产生了一些麻烦。

 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>');
            ;
        
    问题:聊天日志中的链接未转换,而是显示为纯字符串。 问题:链接包含隐藏字符 â£https://www.link.com/product/ABC/myaffiliatelink 当我调用生成的链接时,我收到以下浏览器通知:
  Not Found
    The requested URL â£https://www.link.com/product/ABC/myaffiliatelink was not found on this server.

为了获取消息,我使用:

textContainer.textContent = message.linkify();

谁能解释发生了什么以及如何解决这个问题?

【问题讨论】:

您需要发布您的代码,以便我们有机会找出问题所在。 您可以通过环境变量使用docker secrets 或something like this。但正如@Barmar 所说,您必须提供更多信息,至少需要一些代码才能帮助您 你能给我一个直接适用的例子吗?我对“某事”如何转化为会员链接感到有些困惑。也许您想跟踪人们点击了哪些链接,或者您只是想删除部分链接? 【参考方案1】:

在思考和玩了一会儿代码之后,我得到了答案。当我使用

textContainer.textContent = message.linkify();

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

解决办法是把调用改成

textContainer.innerHTML = message.linkify();

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

最好的问候,乔。

【讨论】:

以上是关于为啥用 textContent 链接不起作用的主要内容,如果未能解决你的问题,请参考以下文章

多维动态数组,为啥不起作用?

textContent 对象属性不起作用

JS中创建的元素上的textContent不起作用?

为啥 pull-right 类在 bootstrap 版本 4.1.0 上不起作用? [复制]

为啥 ngfor 指令不起作用,尽管我在 Typescript 类中创建了正确的对象

为啥通过动态链接导航后pushViewController 不起作用?