从文本区域执行 javascript

2023-11-24

我不完全确定这是否可能,但我正在尝试在浏览器中创建一个在页面上运行 javascript 的迷你人造编辑器。这就是我理论上一直在尝试做的事情

HTML

​<textarea id="cnsl"></textarea>
<button onclick="run()"> run </button>

javascript

var cnsl = document.getElementById('cnsl');

function run() {
    return cnsl.value
}

更具体地说,我试图通过在文本区域中输入的“代码”写入画布元素,例如,如果我输入 ctx.fillRect(10,10,10,10);进入我的文本区域,然后执行 run() 函数,10x10 的正方形将出现在我的画布中。

我很幸运,没有返回 cnsl.value,而是将其写入 HTML 中空脚本元素的innerHTML。但这只会在我第一次执行该函数时起作用,然后在刷新页面之前不会再次起作用。 (例如这个:http://jsfiddle.net/ur5KC/1/这似乎不适用于 jsfiddle 但可以在本地工作,如上所述)

...有任何想法吗???提前致谢!


您可以创建一个脚本元素,设置其text (or 文本内容如果 HTML5 和 DOM 3 兼容)到要执行的脚本,然后将其插入文档中。最好在执行过程中删除元素,这样就不会出现大量(无用的)脚本元素。

function run() {
    var el = document.getElementById('cnsl');
    var scriptText = el.value;
    var oldScript = document.getElementById('scriptContainer');
    var newScript;

    if (oldScript) {
      oldScript.parentNode.removeChild(oldScript);
    }

    newScript = document.createElement('script');
    newScript.id = 'scriptContainer';
    newScript.text = el.value;
    document.body.appendChild(newScript);
}
<textarea id="cnsl"></textarea>
<button onclick="run();">run</button>

请注意,您必须创建一个新元素,因为在 HTML5 中,每个脚本元素有一个关联的标志来指示它是否已被执行,并且只能执行一次。替换内容不会重置标志,并且克隆的脚本元素会保留其克隆来源的元素的设置。

鼓励用户执行自己的脚本可能会破坏文档,但我想这就是您的问题。 :-)

另一种方法是简单地eval无论他们输入什么,它或多或少与上面的相同(但代码少了很多):

function run() {
  var el = document.getElementById('cnsl');
  el && eval(el.value);
}
<textarea id="cnsl"></textarea>
<button onclick="run();">run</button>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从文本区域执行 javascript 的相关文章

随机推荐

  • 区分两个数组中的额外元素?

    我的一位朋友在接受采访时被问到这个问题 您已给出两个整数数组 每个数组的大小为 10 两者都包含 9 个相等的元素 比如 1 到 9 只有一个元素不同 你将如何找到不同的元素 您可以采取哪些不同的方法 一种简单但冗长的方法是 对两个数组进行
  • 创建 clickonce webdeploy 包

    是否可以构建一个包含可使用标准 webdeploy 工具部署到 Web 服务器的 clickonce 应用程序的 Web 部署包 这是理想的过程 MSBuild YourFullyQualifiedProjectName csproj vb
  • 美丽的汤和 Unicode 问题

    我正在使用 BeautifulSoup 来解析一些网页 有时我会遇到如下 unicode hell 错误 在 TheAtlantic com 上查看这篇文章的来源 http www theatlantic com education arc
  • WPF Converter 转换导致 Visual Studio 设计器异常

    如下所示的转换器将导致 2008 Visual Studio 设计器不显示 xaml 并错误显示 指定的转换无效 例外 public class ItemsVisibilityToGridColumnWidthConverter IMult
  • 无法手动关闭 matplotlib 绘图窗口

    我在 Mac OS X Yosemite 上运行 Python v2 7 和 matplotlib v1 5 0 直到最近 我能够在交互式解释器中运行脚本 显示绘图 然后手动终止窗口 例如 import numpy as np x np a
  • 如何安装libpython2.7.so

    我已经安装了Python 2 6 6 17 50 21 email protected which python usr local bin python 还有 Python 2 7 6 位于 17 51 12 email protecte
  • 享元模式中描述的内在状态和外在状态有什么区别?

    从本章开始FlyWeight内部图案四人帮FlyWeight模式适用当大多数对象状态可以成为外在的时候 什么是extrinsic state意思是 我感觉这个模式是用来共享对象的 如果要共享对象 那么该对象怎么可能有任何状态呢 让我们以文字
  • 如何更改角度材料排序图标

    我需要将默认箭头图标从角度材质 matSort 更改为自定义箭头 当前代码
  • C#:对象变量应该分配为 null 吗?

    在C 中 是否需要将一个对象变量赋值给null如果您已经使用完它 即使它超出了范围 不 这实际上可能是危险的并且容易出现错误 考虑一下有人可能稍后尝试使用它 但没有意识到它已被设置为空的可能性 仅当有合理理由将某些内容设置为 null 时
  • MS Access VBA 替换密码加密/解密

    谁能建议我如何实现替代密码风格 VBA中的加密和解密函数 我很欣赏散列被认为是更好的方法 但我需要可逆加密 非常感谢 您可以使用Blowfish 有一个可在 Access 中运行的 Visual Basic 6 版本 可在此处获取 http
  • 是否有函数可以获取区域设置字符串格式的 UTC 日期?

    我想在 JavaScript 中获取当前 UTC 日期 但以本地日期格式显示它 例如Date toLocaleDateString does 我首先尝试获取当前 UTC 日期Date toUTCString 但这实际上并没有以本地格式打印出
  • 奇怪的函数语法

    我看到一个奇怪的函数 看起来像这样 const x a gt b gt a b console log x 1 2 输出是 3 我知道它是一个返回函数的函数 并且 a 和 b 都在同一范围内 但我的问题是 这怎么能用在现实生活中呢 不使用带
  • 初学者如何使用常量内存(Cuda C)

    我有 3 个常数值 A B C 我想将其保存在常量内存中 我通过输入以下代码行找到了一种方法 CUDA global constants constant int A constant int B constant int C int ma
  • 当基类被淘汰时,单元测试会如何变化?

    这在一定程度上是后续行动这个问题 我不确定问这个问题的最佳方式 所以我会尝试一个小故事来设置场景 曾几何时 有一个类 A 它有一个单元测试类 ATests 负责通过公共接口测试其行为 他们幸福地在一起生活了一段时间 然后发生了变化 出现了
  • AutoFixture IEnumerable 与 CreateMany() 的行为

    看帖子的时候here 看起来我应该能够使用创建多个对象CreateMany 使用迭代它们foreach 然后将它们作为数组返回 我看到的是 每次迭代似乎每次都会创建新对象 这是预期的行为吗 要创建的实体 public class TestE
  • 如何使用 Dart 从不同的 URL 提供静态文件?

    有了 Dart 我就得到了awesome html 但我希望它是 awesome 这纯粹是一个 htaccess 我正在使用 Apache 或者有没有办法通过 Dart 或 现代 Web 开发 方式来解决这个问题 This htaccess
  • 将链接插入 MatSnackBar

    是否可以在 Angular Material 2 中插入链接MatSnackBarModule 我尝试在文本中执行此操作 但它将 html 显示为文本 const text a login a this snackBar open text
  • Google adsense 响应服务器响应状态为 400 ()

    我第一次在我的网站上实施 google adsensemyPleaks 在这里我面临下面提到的错误 Failed to load resource the server responded with a status of 400 谁能帮我
  • OpenCV:如何在图像上应用彩虹渐变图?

    假设我们有一个通过 openCV 以某种方式修改的图像 现在我们很乐意申请它渐变贴图 就像我们可以通过 Photoshop 应用的那样 所以我想知道如何通过 openCV 应用渐变图 彩虹色 这是一种使用 Python 创建假 伪彩色图像的
  • 从文本区域执行 javascript

    我不完全确定这是否可能 但我正在尝试在浏览器中创建一个在页面上运行 javascript 的迷你人造编辑器 这就是我理论上一直在尝试做的事情 HTML