【问题标题】:How do I convert Dynamic Javascript to Text?如何将动态 Javascript 转换为文本?
【发布时间】:2014-02-09 19:50:31
【问题描述】:

我有一些代码(无论下面的 jsToBeConverted 函数的主体内是什么),我希望能够将其转换为文本,以便用户可以复制它,然后将其粘贴到<script> 元素在他们的网站上,以便执行。

someElement.onclick = function ()
{
    var textForUserToCopy = (function ()
    {
      x = document.getElementById('someInput').value;

      var jsToBeConverted = function ()
      {
        var y = x + 6;

        var z = function (a)
        {
          return (a + 5);
        };

         window.d = z(y);
      };

      var jsToExecute = "(" + jsToBeConverted + ")();"

      return jsToExecute;
    })();
};

但是这会生成以下文本:

"(function ()
 { 
   var y = x + 6; 

   var z = function (a)
   {
     return (a + 5);
   };

   window.d = z(y);
 })();"

但这不是我想要的。如果对上述内容进行评估,x 显然是未定义的。 我想要的是将 x 替换为其当时的值,然后将 js 转换为文本。所以如果 x 的值恰好是 123,那么生成的文本应该是这样的:

"(function ()
 {
   var y = 6 + 6; 

   var z = function (a)
   {
     return (a + 5);
   };

   window.d = z(y);
 })();"

如果上面的字符串被评估 - window.d 将是 17

是否有一些标准函数/过程用于生成/将动态代码转换为文本?

谢谢

【问题讨论】:

  • 为什么要这样做?这似乎是 XY Problem 的教科书示例。
  • 我正在构建一个应用程序,该应用程序需要一些用户输入,并在此基础上生成一些代码供用户粘贴到 <script> 中。
  • x 总是一个数字,还是可以是不同的类型?如果有,可能是什么类型?
  • 在这种情况下,它只能是一个数字——但这只是一个例子。实际要转换的代码可能长 10 倍,动态值的数量和它们的类型一样大。
  • 嗯,JS 没有通用的“uneval”或“inspect”,所以你将不得不手动处理每种类型......(见答案)

标签: javascript eval


【解决方案1】:

您可以简单地连接。

例如:

"function (x) { return " + generated_value + " + x }";

要获得更优雅的解决方案,请参阅字符串格式: JavaScript equivalent to printf/string.format

【讨论】:

  • 谢谢,我去看看 sprintf - 这个标准的 Js 是不是所有浏览器都支持??
  • 我不这么认为。您可能必须自己编写函数,或者使用已经实现的解决方案。我特别喜欢这个:stackoverflow.com/a/4974284/828709
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多