即使语法正确,Eval()也不会执行



我正在尝试使用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));
  }
}

相关内容

  • 没有找到相关文章

最新更新