diff --git a/src/disqus.js b/src/disqus.js index 5c03395..1dce5f1 100644 --- a/src/disqus.js +++ b/src/disqus.js @@ -298,7 +298,7 @@ let getComment = (cursor) => { let $loadMoreBtn = $$('dsqjs-load-more'), $orderRadio = d.getElementsByClassName('dsqjs-order-radio'); - $loadHideCommentInDisqus = d.getElementsByClassName('dsqjs-has-more-btn'); + $loadHideCommentInDisqus = d.getElementsByClassName('dsqjs-has-more-btn'); let getMoreComment = () => { // 为按钮们取消事件,避免重复绑定 @@ -546,21 +546,26 @@ * @return {string} msg - 经过处理的评论信息 */ let removeDisqUs = (msg) => { - // aMatcher - 只处理 Disqus 短链接 - let aMatcher = new RegExp(/(.+?)<\/a>/gi), - hrefMatcher = new RegExp(/href=\"(.+?)\"/gi) - let link = (msg.match(aMatcher) || []); - link.map((olink) => { - // (.*) 是贪婪处理,会一致匹配到最后,可以用于匹配最后一次 - let link = olink.match(hrefMatcher)[0].replace(/href=\"https:\/\/disq.us\/url\?url=/g, '').replace(/(.*)"/, '$1'); - link = decodeURIComponent(link); - link = link.replace(/(.*):(.*)cuid=(.*)/, '$1') - msg = msg.replace(olink, `${link}`) - }) - - // 在最后添加 target="_blank" 可以生效到全局链接(包括 Disqus CDN 直链) - msg = msg.replace(/href=/g, `target="_blank" href=`) - return msg + let el = document.createElement('div'); + el.innerHTML = msg; + let aTag = el.getElementsByTagName('a'); + for (let i of aTag) { + let link = i.href; + /* + link = link.replace(/https:\/\/disq.us\/url\?url=/g, '').replace(/(.*)"/, '$1'); + link = decodeURIComponent(link); + link = link.replace(/(.*):(.*)cuid=(.*)/, '$1') + */ + link = decodeURIComponent(link.replace(/https:\/\/disq.us\/url\?url=/g, '').replace(/(.*)"/, '$1')).replace(/(.*):(.*)cuid=(.*)/, '$1'); + i.href = link; + i.innerHTML = link; + // 为所有链接添加 nofollow noopener noreferrer 可以生效到全局链接(包括 Disqus CDN 直链) + i.rel = 'nofollow noopener noreferrer' + // 为所有链接添加 target="_blank" 可以生效到全局链接(包括 Disqus CDN 直链) + i.target = '_blank' + } + + return el.innerHTML; } let renderPostItem = (s) => {