求教,有没有可能实现一个字符串转成js的函数,如string s="function(){}",加到<script>里就是一个可以执行的方法。
我是这样做的var jsDocText = document.createTextNode(jsText);
 var jsDoc = document.createElement("script");
 jsDoc.appendChild(jsDocText);
 document.getElementsByTagName("head")[0].appendChild(jsDoc);这样做看页面解析出来的效果,格式完全正确,就是都是文本,不是可执行方法,有没有办法实现呢??

解决方案 »

  1.   

    var s = 'function fn(s) { alert(s); }';
    eval(s);
    fn('test');
      

  2.   

    像楼主的代码,直接append到<script>标签的js代码串会直接运行的吧,怎么还要eval,难道ie下不行?我没测ie,chrome/ff都可以的。
    看在jsbin测试的结果
    http://jsbin.com/unuvev/edit#source
      

  3.   

    var fun="function(){alert(123);}";
    var f1=(new Function("alert(123)"))(),f2=(new Function("return "+fun))();
    f2();
    "eval is evil"
      

  4.   

    ...怎么还在谈eval,下面的代码你们都得到什么结果?难道真是我浏览器太高级了。。
    <html>
    <head>
    <meta charset=utf-8 />
    <title>JS Bin</title>
    </head>
    <body>
      <script type='text/javascript'>
      var jsText = 'var myfn = function(){alert(1)}'
      var jsDocText = document.createTextNode(jsText);
      var jsDoc = document.createElement("script");
      jsDoc.appendChild(jsDocText);
      document.getElementsByTagName("head")[0].appendChild(jsDoc);
      myfn()
      </script>
    </body>
    </html>
      

  5.   

    我感觉 他是把string写进去了 我也觉得append进去可以执行
      

  6.   

    在IE下会"报意外地调用了方法或属性访问"的错,就在 jsDoc.appendChild(jsDocText);这一句,在火狐下能执行。
      

  7.   

    果然是万恶的IE,改用innerHTML呢?var jsText = '(function(){alert(1)})()'
    var jsDoc = document.createElement("script");
    jsDoc.innerHTML = jsText;
    document.getElementsByTagName("head")[0].appendChild(jsDoc);
      

  8.   

    我最开始用的就是innerHTML,不行,script没有innerHTML这个属性,才改用现在的办法的。。哎,,
      

  9.   

    jsText楼主把你定义这个的代码贴出来。。
      

  10.   

    jsText就是一个字符串,从后台返回来的,比如是
    jsText="var $ = function(id) {
        return document.getElementById(id);
    }";
    这样的,
      

  11.   

    IE是这样的,td,tr table那些也没有innerHTML,那你这种方案就别用了。
    只好用eval了,或者直接new Function,因为它的参数就是代码串。var jsText = 'function(){alert(1)}'var jscode = new Function('return '+jsText)();jscode()
      

  12.   


    嗯,这样确实可以,,不过如果jsText="function a(){};function b(){};function C(){}..."这种格式的就不能了吧。