微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在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()方法).

问候.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐