在iframe / div中禁用JavaScript

前端之家收集整理的这篇文章主要介绍了在iframe / div中禁用JavaScript前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在制作一个小的HTML页面编辑器.编辑器将文件加载到iframe中.从那里,它可以添加,修改删除具有新属性,样式等的页面上的元素.问题在于,JavaScript(和/或其他编程语言)可以在加载之前完全修改页面,之前您开始编辑元素.所以当你保存的时候,它不会保存原来的标记,而修改页面你的更改.

所以,我需要一些方法来禁用iframe上的JavaScript,或者以某种方式删除JavaScript开始修改页面之前的所有JavaScript. (我想我最终不得不解析PHP文件,但这不应该太难)我考虑编写一个脚本循环遍历所有的元素,删除任何标签,onclick的,onfocus的,onmouSEOver的等等.但是这将是一个真正的痛苦.

有没有人知道一个更简单的方法来摆脱JavaScript在iframe中运行?

更新:除非我错过了一些东西,我相信没有办法简单地“禁用JavaScript”.如果我错了请纠正我但是,我想唯一的办法是从所请求的页面字符串中解析任何脚本标签和JavaScript事件(点击,鼠标悬停等).

解决方法

您可以尝试CKEditor采用的相同解决方案,其中有一个演示 here.
通过从RTE模式切换到查看源模式,您可以输入一些JavaScript并查看结果,这是替换安全编码字符串中的JS节点.
如果您在视图源模式,通过输入一些JS行,如:
<script type="text/javascript">
// comment
alert('Ciao');
</script>

当您返回富文本编辑器模式时,您将看到它呈现:

<!--{cke_protected}%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0D%0A%2F%2F%20comment%0D%0Aalert('Ciao')%3B%0D%0A%3C%2Fscript%3E-->

我认为这是最简单有效的方法之一,因为RegExp解析JS节点并不复杂.
一个例子:

var pattern = /<script(\s+(\w+\s*=\s*("|').*?\3)\s*)*\s*(\/>|>.*?<\/script\s*>)/;
var match = HTMLString.match(pattern); // array containing the occurrences found

(当然,要替换脚本节点你应该使用replace()方法).

问候.

猜你在找的HTML相关文章