首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我正在制作一个代码编辑器应用程序,它允许您执行HTML/CSS/JS代码,但是JavaScript只执行一次

我正在制作一个代码编辑器应用程序,它允许您执行HTML/CSS/JS代码,但是JavaScript只执行一次
EN

Stack Overflow用户
提问于 2019-03-25 14:17:58
回答 1查看 106关注 0票数 2

每个HTML、CSS和JS都有3个文本区域。例如,在CSS & HTML文本区域内键入:html { background: green; }将使iframe变为绿色,然后您可以将绿色更改为蓝色,而无需刷新页面,而iframe就会变成蓝色。但是,当我编写JS代码时,它只执行一次,例如,document.write("1");在iframe中打印1,但是如果我添加另一个document.write("2");,它将iframe保留为空。

代码语言:javascript
运行
AI代码解释
复制
    // Executing code when clicking RUN

$("#runButton").click(function() {                     // Adds the CSS code               // Adds the HTML code
    $("iframe").contents().find("html").html('<style>' + $("#cssCode").val() + '</style>' + $("#htmlCode").val());
    /* ~~~~~~~~~~~~~~~ Placing the code from the containers into the iframe (BROWSER container) ~~~~~~~~~~~~~~~ */


            // Evaluating JavaScript 
        document.getElementById("browserFrame").contentWindow.eval($("#jsCode").val());


});

我希望在iframe中每次添加JS代码时都会出现新的输出,就像它对HTML和CSS所做的一样。请在这里试用一下:https://online-code-editor.netlify.com/

(不要介意消失的图标)

更新:

我发现这个document.getElementById("browserFrame").contentDocument.location.reload(true);

重新加载我的iframe,但是太快了,只有单击RUN才能使它工作吗?

或者说增加了一些延迟

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-25 17:00:50

而不是重新加载iframe -使用postMessage

下面是一个示例--有一个带有HTML、CSS、JS textarea的父页面和一个沙箱iframe用于预览目的:

index.html

代码语言:javascript
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>App</title>
    <style>*{margin:0;box-sizing:border-box;} iframe,textarea{width:100%;min-height:3em;}</style>
</head>
<body>

    <textarea id="html">Hello, stack &lt;b&gt;overflow!&lt;/b&gt;</textarea>
    <textarea id="css">body {background: #F48024;}</textarea>
    <textarea id="js">document.body.innerHTML = "&lt;b&gt;World!&lt;/b&gt;";</textarea><br>
    <iframe id="iframe" src="iframe.html" sandbox="allow-same-origin allow-scripts allow-modals allow-forms" frameborder="0"></iframe>

    <script>
        const textareas = document.querySelectorAll("#css, #html, #js");
        const iframe = document.querySelector("#iframe");
        const post = () => textareas.forEach(el => iframe.contentWindow.postMessage({
            id: el.id,
            value: el.value
        }, '*')); // Use 'http://example.com' instead of '*'

        // Setup Events and Iframe Init
        textareas.forEach(el => el.addEventListener('input', post));
        iframe.addEventListener('load', post);
    </script>
</body>
</html>

iframe.html

代码语言:javascript
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Iframe</title>

    <style id="__app__css"></style>
    <script id="__app__js"></script>
    <script>
        window.addEventListener('message', (evt) => {
            // if (evt.origin !== "http://example.com") return; // Fix and uncomment in production
            document.getElementById(`__app__${evt.data.id}`).innerHTML = evt.data.value;
            if (evt.data.id==='js') eval(evt.data.value);
        });
    </script>
</head>

<body id="__app__html"></body>

</html>

以上只是一个让你开始的演示,当输入eval循环或烦人的尝试输入alert("something")时,您可以添加一个复选框" autorun“和一个按钮"Run”,如果不选中自动运行,它就变成了unhidden,这可能是危险的。

还要确保在生产中使用postMessage origin

https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

https://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55347213

复制
相关文章
JavaScript——代码的执行
JavaScript语言规范没有包含任何线程机制,客户端的JavaScript也没有明确定义线程机制,但浏览器端的JavaScript引擎基本上还是严格按照”单线程”模型去执行JavaScript代码的。究其原因,应该还是为了简单吧,因为JavaScript的主要用途是与用户交互以及操作DOM,如果采用多线程,将会带来很复杂的同步问题。
Html5知典
2019/11/26
8710
第一章 Electron介绍 | Electron in Action(中译)
网页的一大特色就是无处不在, 这是一个令人惊叹的平台,用它所创建的协作平台,可以被多种类型的设备所访问,无论设备运行在何种操作系统上。换句话说,网页只能运行在浏览器中,无法直接运行在操作系统中,因此网页应用程序也就无法访问文件操作系统。它们也无法执行非JavaScript编写的代码,他们无法调用桌面应用程序可以使用的众多操作系统接口。还有,当大多数网页应用程序没有可靠的互联网连接时,也就无法使用了。
sanshengshui
2019/06/26
3.6K0
第一章 Electron介绍 | Electron in Action(中译)
python爬虫执行js代码-execjs
execjs会自动使用当前电脑上的运行时环境(建议用nodejs,与Phantomjs)
小小咸鱼YwY
2020/06/19
2.8K0
iOS_只执行一次、timer内重复点击,只执行最后一次
[NSObject cancelPreviousPerformRequestsWithTarget:self];
mikimo
2022/07/20
1.4K0
RCE命令执行/代码执行
RCE英文全称:remote command/code execute 分为远程命令执行ping和远程代码执行evel。 漏洞出现的原因:没有在输入口做输入处理。 我们常见的路由器、防火墙、入侵检测等设备的web管理界面上
wuming
2021/01/21
2.1K0
RCE命令执行/代码执行
JavaScript代码是如何被执行的
计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。根据语言的执行流程,可以把语言分成编译型语言和解释型语言。
木子星兮
2020/07/16
1.1K0
如何在 Chrome 中执行 JavaScript 代码
要在浏览器中执行 JavaScript 脚本,首先你的浏览器得支持。现在主流推荐 Chrome 浏览器,也可以使用基于 Chromium 的 Edge 浏览器。下面来介绍如何在 Chrome 中打开开发者工具,以及如何在开发者工具中运行调试 JavaScript 代码。
村雨遥
2022/03/14
6.1K0
如何在 Chrome 中执行 JavaScript 代码
HTML+css+js代码春节灯笼
创建一个css文件和js文件,把代码粘贴进去,index.html引入css和js,就可以实现啦,快来试试吧!
佛系豪豪吖
2023/02/23
1.3K0
Microsoft Outlook 爆严重漏洞,可允许远程代码执行
近期,微软发布了一系列补丁,修复了自身产品中一些影响广泛以及关键的Bug,其中包括更新了微软Office套件版本,解决了其中的部分安全问题。而安全专家研究发现,其中的一个漏洞(cve-2015-6172),攻击者通过以“特定打包的微软Office文件”作为附件,由Outlook发送邮件给目标用户,可允许远程代码执行。 来自微软的安全公告提及: 此次更新解决了微软办公软件的安全漏洞。其中威胁级别最高的漏洞,可允许远程代码执行。如果用户打开一个专门制作的微软办公文件,攻击者可以利用该漏洞在当前用户目录下运
FB客服
2018/02/07
3.3K0
Microsoft Outlook 爆严重漏洞,可允许远程代码执行
压缩JS,提高代码执行速度
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
奋飛
2019/08/15
2.7K0
JS代码是怎么被执行的
我们看到的JS都是在浏览器中或者在Node环境中运行的对吧,那不论是浏览器还是Node,负责编译并且解释执行JS代码的都是一个叫做V8的东西,所以这个问题其实就是V8引擎是怎么去运行JavaScript的,而js和C/C++/Go/Rust这类静态编译的语言不同,这些静态编译的语言通过编译器把代码变成机器码,然后在机器上运行,js呢在编译后会生成字节码,然后在v8的虚拟机上运行字节码,java和python也有自己的虚拟机实现,这些语言都将生成的字节码放在虚拟机上运行,相比于直接以机器码运行的语言,这些语言在损失了性能的同时又获得了更多功能上的遍历,然后我们回到V8引擎是如何执行JS的问题。
ek1ng
2023/03/08
3.1K0
JS代码是怎么被执行的
html的css代码_html通用css代码大全
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说html的css代码_html通用css代码大全,希望能够帮助大家进步!!!
Java架构师必看
2022/05/16
11.8K0
从受限的代码执行到任意代码执行
看到信安之路发了一篇关于某 CMS 的审计,之前对这个 CMS 也算是有一点了解吧,看到里面的一处 RCE 提起了我一点兴趣,于是有了下文。
信安之路
2020/04/22
9850
从受限的代码执行到任意代码执行
html左侧浮动广告代码,如何制作浮动广告 JavaScript制作浮动广告代码
advInitTop=document.getElementById(“ad”).style.pixelTop;
全栈程序员站长
2022/11/08
4.5K0
java for循环里面执行sql语句操作,有效结果只有一次,只执行了一次sql mybatis 循环执行update生效一次 实际只执行一次
java后台controller中,for循环执行数据库操作,但是发现实际仅仅执行了一次,或者说提交成功了一次,并没有实际的个数循环
noteless
2018/09/11
3K0
HTML表格代码_html如何制作表格代码
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169633.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
14.8K0
android 代码执行
Android API level 16以及之前的版本存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用WebView.addJavascriptInterface方法,远程攻击者可通过使用Java Reflection API利用该漏洞执行任意Java对象的方法,简单的说就是通过addJavascriptInterface给WebView加入一个JavaScript桥接接口,JavaScript通过调用这个接口可以直接操作本地的JAVA接口。该漏洞最早公布于CVE-2012-6636【1】,其描述了WebView中addJavascriptInterface API导致的远程代码执行安全漏洞。
tea9
2022/07/16
5470
如何使用Vue.js和Axios来显示API中的数据
Vue.js是一个用于构建用户界面的前端JavaScript框架。 它的设计从头开始逐步采用,并与其他图书馆或现有项目完美集成。 这使它非常适合小型项目以及与其他工具和库一起使用的复杂单页应用程序。
子润先生
2021/06/15
8.8K0
使用Java脚本引擎执行javascript代码示例
– 使得 Java 应用程序可以通过一套固定的接口与各种脚本引擎交互,从 而达到在 Java 平台上调用各种脚本语言的目的。 – Java 脚本 API 是连通 Java 平台和脚本语言的桥梁。 – 可以把一些复杂异变的业务逻辑交给脚本语言处理,这又大大提高了 开发效率。
bboy枫亭
2021/12/07
3.9K0
使用Java脚本引擎执行javascript代码示例
点击加载更多

相似问题

函数,它只执行一次代码。

53

代码只执行一次- Phonegap & Javascript

10

跨HTML、CSS和Javascript跟踪代码执行

40

我已经使用append添加了HTML代码,但是这个新代码不再执行javascript

30

代码只执行一次,但应继续执行

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文