Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何添加<;脚本>;元素并执行其代码?_Javascript_Html - Fatal编程技术网

Javascript 如何添加<;脚本>;元素并执行其代码?

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

我想在现有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.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
属性添加代码的解决方案对我来说是一个不错的解决方案。