feat: MdWidget/MarkdownViewer外链新窗口打开(非同源链接不再被拦截成站内跳转)

This commit is contained in:
yumoqing 2026-08-29 15:00:18 +08:00
parent 9f05e56d93
commit 47b08371aa

View File

@ -51,8 +51,17 @@ bricks.MdWidget = class extends bricks.JsWidget {
this.dom_element.innerHTML = marked.parse(this.md_content); this.dom_element.innerHTML = marked.parse(this.md_content);
/* change links in markdown to a bricks action */ /* change links in markdown to a bricks action */
var links = this.dom_element.getElementsByTagName('a'); var links = this.dom_element.getElementsByTagName('a');
var host = location.origin;
for (var i=0; i<links.length; i ++){ for (var i=0; i<links.length; i ++){
var url = links[i].href; var url = links[i].href;
/* 外链(http/https 且非当前源):新窗口打开,不拦截。
references 来源可查证(招标原文/政府网站等)。 */
if (/^https?:\/\//i.test(url) && url.indexOf(host) !== 0){
links[i].target = '_blank';
links[i].rel = 'noopener noreferrer';
links[i].onclick = null;
continue;
}
links[i].href = '#'; links[i].href = '#';
links[i].onclick=this._build.bind(this, url); links[i].onclick=this._build.bind(this, url);
} }
@ -150,8 +159,15 @@ bricks.MarkdownViewer = class extends bricks.VBox {
/* change links in markdown to a bricks action */ /* change links in markdown to a bricks action */
var links = this.md_el.getElementsByTagName('a'); var links = this.md_el.getElementsByTagName('a');
var host = location.origin;
for (var i=0; i<links.length; i ++){ for (var i=0; i<links.length; i ++){
var url = links[i].href; var url = links[i].href;
if (/^https?:\/\//i.test(url) && url.indexOf(host) !== 0){
links[i].target = '_blank';
links[i].rel = 'noopener noreferrer';
links[i].onclick = null;
continue;
}
links[i].href = '#'; links[i].href = '#';
links[i].onclick=this._build.bind(this, url); links[i].onclick=this._build.bind(this, url);
} }