1

我正在使用 iframe 作为编辑器构建文本编辑器。

我正在处理一个菜单项,当单击该菜单项时,允许用户编写一段代码,然后使用 Prism 语法高亮显示样式,并与其余文本内容一起添加到 iframe 中。

在构建普通网页时,任何包含在 pre 和 code 标签中的代码都会立即被设置为如下所示:

在此处输入图像描述

我的问题是我找不到让 Prism 语法荧光笔在我的文本编辑器 iframe 中工作的方法(任何语法荧光笔都会有同样的问题)。

prism.css 文件可以在 iframe 中工作,但 prism.js 文件不能。我知道这是因为当函数运行时,javascript 文件尚未处理输出,该文件添加了使用 css 文件更改颜色所需的类:

在此处输入图像描述

此图像显示了单击菜单项时发生的情况。html 被插入到 iframe 中,但没有任何样式。然后,当您按下预览按钮查看博客文章的外观时,代码块文本未应用任何样式,因为 prism.js 未在 iframe 内运行。

我已经尝试将脚本包含在 iframe 本身的 head 标签中,并带有“allow-scripts”和“allow-cross-origin”类,但这不起作用。

我真的很感激任何想法或解决方案。

这是我的代码:

HTML:

在此处输入图像描述

JavaScript(单击“”菜单项时调用的函数):

在此处输入图像描述

4

2 回答 2

0

iframe只是外部 Web 源的加载器 - 来自另一个网站的内容,或来自外部网站的整个页面。出于安全原因,操作 iframe 内的内容的功能被禁用,以防止 XSS 和网络钓鱼攻击。

iframe不是您自己网页中的元素或内容的容器。放置在 iframe 中的内容将被浏览器忽略。

<iframe>This is my content</iframe>

iframe 需要从中加载源。

<iframe src="https://www.wikipedia.com/"></iframe>

没有理由使用 iframe 作为您自己的内容的容器。如果您只是将 iframe 用作编辑器的容器,那么几乎任何其他 HTML 标记都可以正常工作。切换<iframe>到 a <div>,您将拥有一个工作编辑器。

于 2018-05-19T14:53:55.017 回答
0

弄清楚我哪里出错了,prism.js 文件在页面加载时运行,并且在将新内容添加到页面后不再运行。将代码块添加到页面后,通过将 src 链接添加到脚本标签来解决它。

于 2018-05-19T16:19:31.837 回答