我正在尝试使用eval((执行一个事件侦听器
["document.addEventListener('load', "].forEach(f => {
eval(f + `function(){ console.log("test") })`)
})
但是控制台从不记录。当我用console.log替换eval((时,它表明字符串具有正确的语法
["document.addEventListener('load', "].forEach(f => {
console.log(f + 'function(){ console.log("test") })');
}) // logs 'document.addEventListener('load', function(){ console.log("test") })'
那么,如果语法正确,问题出在哪里呢?
当我从字符串中删除"function()
"并直接激发"console.log
"时,它就起作用了。
["document.addEventListener('load', "].forEach(f => {
eval(f + 'console.log("nice"))');
}) // this works
由于回答的时间较长而移到此处
您可以尝试一个获取代码字符串的函数,并在加载页面时立即运行它,否则添加一个事件侦听器
function runWhenLoaded(codeString) {
if (document.readyState === 'complete') { // checks if it is loaded already
eval(codeString);
else {
document.addEventListener('load', () => eval(codeString));
}
}