Javascript 如何添加<;脚本>;元素并执行其代码?
我想在现有DOM中添加一个元素以运行javascript代码 我是和YUI一起做的:Javascript 如何添加<;脚本>;元素并执行其代码?,javascript,html,Javascript,Html,我想在现有DOM中添加一个元素以运行javascript代码 我是和YUI一起做的: var scriptNode = Y.Node.create('<script type="text/javascript" charset="utf-8">alert("Hello world!");<\/script>'); var headNode = Y.one('head'); headNode.append(scriptNode); var scriptNode=Y.Nod
var scriptNode = Y.Node.create('<script type="text/javascript" charset="utf-8">alert("Hello world!");<\/script>');
var headNode = Y.one('head');
headNode.append(scriptNode);
var scriptNode=Y.Node.create('alert(“Hello world!”);');
var headNode=Y.one(“head”);
headNode.append(scriptNode);
它已成功添加到DOM中,但未向我发出警报
有人知道问题出在哪里?我不知道YUI的
节点.create()
函数是如何工作的,所以对此不予评论。但一个简单的跨浏览器脚本是:
window.onload = function() {
var s = document.createElement('script');
s.type = 'text/javascript';
var code = 'alert("hello world!");';
try {
s.appendChild(document.createTextNode(code));
document.body.appendChild(s);
} catch (e) {
s.text = code;
document.body.appendChild(s);
}
}
try..catch块是必需的,因为大多数浏览器都喜欢第一种方法,但有些浏览器不喜欢,因此会抛出错误。第二种方法包括这些。您还可以简单地评估代码,这或多或少相当于某些库所做的工作。我在JQuery源代码中找到了这个函数,它似乎做了您想要做的事情,并且感觉比其他方法更简洁。但是我还是一个JS初学者,可能看不到细节。无论如何,有人可能会从这件事上拿走一些有用的东西
function DOMEval( code, doc ) {
doc = doc || document;
var script = doc.createElement( "script" );
script.text = code;
doc.head.appendChild( script ).parentNode.removeChild( script );
}
您为什么不直接运行JS?您是否可以控制
scriptNode
中的Javascript?将其包装在函数中,并在附加后调用它?刚刚发现这一点-似乎是适当的和有用的:您的结束标记有一个额外的“\”,它应该是,不确定这是否会影响它的harpper-反斜杠引用下面的正斜杠,因此您不能将document.body.appendChild放在finally子句下吗?是,这很好,因为错误是由于将文本节点附加到脚本元素而导致的。如果catch块代码满足更多浏览器的要求,那么为什么不直接使用它呢?请注意,如果您评估代码而不是添加脚本元素,则无法正确设置。如果您正在制作一个供其他人使用的工具,那么他们的脚本代码可能取决于document.currentScript
removeChild调用的内容?这不会删除您刚才添加的脚本吗?是否有我遗漏的技巧?@Danger它将代码附加到脚本标记中,立即执行,然后移除脚本标记以进行清理。函数名为DOMEval,而不是addScript等。使用createTextNode
将代码作为字符串追加。您通过text
属性添加代码的解决方案对我来说是一个不错的解决方案。