IPython notebook markdown -- 允许的 HTML 标签列表是什么?我该如何更改它们?
IPython notebook markdown -- what are the list of allowed HTML tags and how can I change them?
我正在使用 IPython Notebook markdown 创建文档,它确实允许 HTML 例如 <img>
但我添加了 <object>
以包含 SVG文件,它不会出现在 IPython Notebook 输出中。我仔细检查了 IPython Notebook 的 HTML 来源,发现 IPython Notebook 服务器不提供 <object>
标签。看起来 <iframe>
标签也被清理了。
而当我自己在 IPython Notebook 之外将其转换为 HTML 文件时,它工作正常。我需要做些什么才能将 <object>
和 <iframe>
添加到允许的 HTML 标签列表中吗?
我找到了 Jupyter 的 security.js 但不确定它是在服务器上运行还是在客户端上运行,也不确定如何更改它。
我也试过文件→信任笔记本,但也没有解决问题。
我对 site-packages/notebook/static/notebook/js/main.min.js 的本地副本进行了 monkeypatched 以得到这个:
var sanitize_html = function (html, allow_css) {
/**
* sanitize HTML
* if allow_css is true (default: false), CSS is sanitized as well.
* otherwise, CSS elements and attributes are simply removed.
*/
var html4 = caja.html4;
if (allow_css) {
// allow sanitization of style tags,
// not just scrubbing
html4.ELEMENTS.style &= ~html4.eflags.UNSAFE;
html4.ATTRIBS.style = html4.atype.STYLE;
} else {
// scrub all CSS
html4.ELEMENTS.style |= html4.eflags.UNSAFE;
html4.ATTRIBS.style = html4.atype.SCRIPT;
}
/* BEGIN NEW CODE */
var whitelist_key = html.match(/<span class="whitelist:([0-9A-Za-z-_]+)"\s+\/?>/)
if (whitelist_key && whitelist_key[1]== /* password goes here */)
{
console.log("whitelist ok");
html4.ELEMENTS.object &= ~html4.eflags.UNSAFE;
html4.ATTRIBS['iframe::src'] = 0;
html4.ATTRIBS['object::data'] = 0;
html4.ATTRIBS['object::type'] = 0;
}
/* END NEW CODE */
然后在我笔记本的单元格中添加 <span class="whitelist:mypassword" />
目前有效,我在 github 上打开了 issue #2614。
我正在使用 IPython Notebook markdown 创建文档,它确实允许 HTML 例如 <img>
但我添加了 <object>
以包含 SVG文件,它不会出现在 IPython Notebook 输出中。我仔细检查了 IPython Notebook 的 HTML 来源,发现 IPython Notebook 服务器不提供 <object>
标签。看起来 <iframe>
标签也被清理了。
而当我自己在 IPython Notebook 之外将其转换为 HTML 文件时,它工作正常。我需要做些什么才能将 <object>
和 <iframe>
添加到允许的 HTML 标签列表中吗?
我找到了 Jupyter 的 security.js 但不确定它是在服务器上运行还是在客户端上运行,也不确定如何更改它。
我也试过文件→信任笔记本,但也没有解决问题。
我对 site-packages/notebook/static/notebook/js/main.min.js 的本地副本进行了 monkeypatched 以得到这个:
var sanitize_html = function (html, allow_css) {
/**
* sanitize HTML
* if allow_css is true (default: false), CSS is sanitized as well.
* otherwise, CSS elements and attributes are simply removed.
*/
var html4 = caja.html4;
if (allow_css) {
// allow sanitization of style tags,
// not just scrubbing
html4.ELEMENTS.style &= ~html4.eflags.UNSAFE;
html4.ATTRIBS.style = html4.atype.STYLE;
} else {
// scrub all CSS
html4.ELEMENTS.style |= html4.eflags.UNSAFE;
html4.ATTRIBS.style = html4.atype.SCRIPT;
}
/* BEGIN NEW CODE */
var whitelist_key = html.match(/<span class="whitelist:([0-9A-Za-z-_]+)"\s+\/?>/)
if (whitelist_key && whitelist_key[1]== /* password goes here */)
{
console.log("whitelist ok");
html4.ELEMENTS.object &= ~html4.eflags.UNSAFE;
html4.ATTRIBS['iframe::src'] = 0;
html4.ATTRIBS['object::data'] = 0;
html4.ATTRIBS['object::type'] = 0;
}
/* END NEW CODE */
然后在我笔记本的单元格中添加 <span class="whitelist:mypassword" />
目前有效,我在 github 上打开了 issue #2614。