Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.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
可以运行写入DOM(内部HTML)的javascript吗?_Javascript_Html - Fatal编程技术网

可以运行写入DOM(内部HTML)的javascript吗?

可以运行写入DOM(内部HTML)的javascript吗?,javascript,html,Javascript,Html,例如: document.getElementById("test").innerHTML= "<script>document.write('worked')</script>"; document.getElementById(“测试”).innerHTML=“document.write('worked')”; 结果是: <div id="test"><script>document.write('worked')</script&

例如:

document.getElementById("test").innerHTML= "<script>document.write('worked')</script>";
document.getElementById(“测试”).innerHTML=“document.write('worked')”;
结果是:

<div id="test"><script>document.write('worked')</script></div>
document.write('worked'))
i、 e没有运行JS。为什么我不先让.innerhtml“工作”起来呢?这是一个技术能力的问题。是否可以在给定场景的DOM中运行javascript


谢谢

仅将innerHTML设置为包含脚本标记的内容是不够的。必须创建脚本元素并将其附加到DOM中。我相信这样做的目的是在注入大量内容时提供一些跨站点脚本保护

var script = document.createElement('script');
script.innerHTML = "alert('ran some JS');";
document.body.appendChild(script);
例如:

document.write
不会像你想象的那样工作<代码>文档。写入不会将文本放置在脚本标记所在的位置。相反,它将把文本放在HTML解析器当前正在查看的位置。根据JS代码的运行时间,这些代码可能相同,也可能完全不同

因此,除其他原因外,不要使用
文档。为任何事情编写
。曾经甚至调试


最后,虽然有时插入指向其他js文件的脚本标记很有用:

var script = document.createElement('script');
script.src = 'somefile.js';
document.head.appendChild(script);
使用包含JS的脚本标记执行此操作毫无意义。您正在使用javascript创建一个脚本标记,该标记应立即运行一些javascript。为什么不直接运行您想要运行的javascript,而不是创建一个新的脚本标记来为您运行呢

所以不要这样做:

var script = document.createElement('script');
script.innerHTML = "alert('ran some JS');";
document.body.appendChild(script);
相反,只要做:

alert('ran some JS');

仅仅将innerHTML设置为包含脚本标记的内容是不够的。必须创建脚本元素并将其附加到DOM中。我相信这样做的目的是在注入大量内容时提供一些跨站点脚本保护

var script = document.createElement('script');
script.innerHTML = "alert('ran some JS');";
document.body.appendChild(script);
例如:

document.write
不会像你想象的那样工作<代码>文档。写入
不会将文本放置在脚本标记所在的位置。相反,它将把文本放在HTML解析器当前正在查看的位置。根据JS代码的运行时间,这些代码可能相同,也可能完全不同

因此,除其他原因外,不要使用
文档。为任何事情编写
。曾经甚至调试


最后,虽然有时插入指向其他js文件的脚本标记很有用:

var script = document.createElement('script');
script.src = 'somefile.js';
document.head.appendChild(script);
使用包含JS的脚本标记执行此操作毫无意义。您正在使用javascript创建一个脚本标记,该标记应立即运行一些javascript。为什么不直接运行您想要运行的javascript,而不是创建一个新的脚本标记来为您运行呢

所以不要这样做:

var script = document.createElement('script');
script.innerHTML = "alert('ran some JS');";
document.body.appendChild(script);
相反,只要做:

alert('ran some JS');

你为什么需要这个?@Guanxi想知道这是否可能,我怀疑它会起作用;你试过了吗?(您需要在所有浏览器中进行测试才能确定)。但你为什么要这么做呢?这对你有什么好处?代码中的脚本元素只存在于可以运行代码的情况下。。。如果你在JS上下文中,你已经可以运行代码了,那么把它放到脚本标记中有什么好处呢?我想你需要解析页面并评估()javascript bitsinnerHTML是用来插入HTML的,见图。因此你的标记将被解释为HTML,并使用或更糟的方式呈现为HTML,一点也不渲染。你为什么需要这个呢?@Guanxi想知道这是否可能,我怀疑它会起作用;你试过了吗?(您需要在所有浏览器中进行测试才能确定)。但你为什么要这么做呢?这对你有什么好处?代码中的脚本元素只存在于可以运行代码的情况下。。。如果你在JS上下文中,你已经可以运行代码了,那么把它放到脚本标记中有什么好处呢?我想你需要解析页面并评估()javascript bitsinnerHTML是用来插入HTML的,见图。因此你的标记将被解释为HTML,并使用或更糟的方式呈现为HTML,根本不渲染。但这不一定要在JS脚本标记中才能工作吗?我说的是将代码写入一个inner.html,然后运行该代码,而不是像在我的示例中那样被忽略。如果您真的想通过大型innerHTML注入来实现这一点,您必须找到脚本标记并手动评估它们。但真的,想想你想做什么。我很确定有一种更好的方法可以让整个问题变得不必要。但这不一定要在JS脚本标记中才能工作吗?我说的是将代码写入一个inner.html,然后运行该代码,而不是像在我的示例中那样被忽略。如果您真的想通过大型innerHTML注入来实现这一点,您必须找到脚本标记并手动评估它们。但真的,想想你想做什么。我很确定有更好的方法使整个问题变得不必要。