关于js字符串转成函数

wss541623 2012-03-31 01:22:11
求教,有没有可能实现一个字符串转成js的函数,如string s="function(){}",加到<script>里就是一个可以执行的方法。
我是这样做的

var jsDocText = document.createTextNode(jsText);
var jsDoc = document.createElement("script");
jsDoc.appendChild(jsDocText);
document.getElementsByTagName("head")[0].appendChild(jsDoc);

这样做看页面解析出来的效果,格式完全正确,就是都是文本,不是可执行方法,有没有办法实现呢??
...全文
5143 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wss541623 2012-03-31
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

引用 10 楼 的回复:

引用 9 楼 的回复:

果然是万恶的IE,改用innerHTML呢?
JScript code

var jsText = '(function(){alert(1)})()'
var jsDoc = document.createElement("script");
jsDoc.innerHTML = jsText;
document.ge……
[/Quote]

嗯,这样确实可以,,不过如果jsText="function a(){};function b(){};function C(){}..."这种格式的就不能了吧。
foolbirdflyfirst 2012-03-31
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用 9 楼 的回复:

果然是万恶的IE,改用innerHTML呢?
JScript code

var jsText = '(function(){alert(1)})()'
var jsDoc = document.createElement("script");
jsDoc.innerHTML = jsText;
document.getElementsByTagNam……
[/Quote]
IE是这样的,td,tr table那些也没有innerHTML,那你这种方案就别用了。
只好用eval了,或者直接new Function,因为它的参数就是代码串。

var jsText = 'function(){alert(1)}'

var jscode = new Function('return '+jsText)();

jscode()
wss541623 2012-03-31
  • 打赏
  • 举报
回复
jsText就是一个字符串,从后台返回来的,比如是
jsText="var $ = function(id) {
return document.getElementById(id);
}";
这样的,
三石-gary 2012-03-31
  • 打赏
  • 举报
回复
jsText楼主把你定义这个的代码贴出来。。
wss541623 2012-03-31
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

果然是万恶的IE,改用innerHTML呢?
JScript code

var jsText = '(function(){alert(1)})()'
var jsDoc = document.createElement("script");
jsDoc.innerHTML = jsText;
document.getElementsByTagName("head")[0].appendC……
[/Quote]
我最开始用的就是innerHTML,不行,script没有innerHTML这个属性,才改用现在的办法的。。哎,,
foolbirdflyfirst 2012-03-31
  • 打赏
  • 举报
回复
果然是万恶的IE,改用innerHTML呢?

var jsText = '(function(){alert(1)})()'
var jsDoc = document.createElement("script");
jsDoc.innerHTML = jsText;
document.getElementsByTagName("head")[0].appendChild(jsDoc);
wss541623 2012-03-31
  • 打赏
  • 举报
回复
在IE下会"报意外地调用了方法或属性访问"的错,就在 jsDoc.appendChild(jsDocText);这一句,在火狐下能执行。
默默不得鱼 2012-03-31
  • 打赏
  • 举报
回复
我感觉 他是把string写进去了 我也觉得append进去可以执行
foolbirdflyfirst 2012-03-31
  • 打赏
  • 举报
回复
...怎么还在谈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>
Acesidonu 2012-03-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
JScript code

var s = 'function fn(s) { alert(s); }';
eval(s);
fn('test');
[/Quote]
++
默默不得鱼 2012-03-31
  • 打赏
  • 举报
回复
var fun="function(){alert(123);}";		
var f1=(new Function("alert(123)"))(),f2=(new Function("return "+fun))();
f2();

"eval is evil"
foolbirdflyfirst 2012-03-31
  • 打赏
  • 举报
回复
像楼主的代码,直接append到<script>标签的js代码串会直接运行的吧,怎么还要eval,难道ie下不行?我没测ie,chrome/ff都可以的。
看在jsbin测试的结果
http://jsbin.com/unuvev/edit#source
乌镇程序员 2012-03-31
  • 打赏
  • 举报
回复
var s = 'function fn(s) { alert(s); }';
eval(s);
fn('test');
p2227 2012-03-31
  • 打赏
  • 举报
回复
eval

87,994

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧