在正确的上下文中执行 Onload 属性 js



我正在处理覆盖document.write的任务(对document.write的调用来自第三方js,所以是的,我知道它很糟糕,除了广告:(之外没有人使用它( 因此,在其中一个 document.write 调用中,html 字符串包含一个设置了 onload 属性的 iframe,并且因为我在附加 iframe 时使用 appendChild 而不是 document.write,所以我需要在代码进行几次修改后执行 onload js。 我试过做这样的事情:

let Eval = function(str){
return eval(str);
}.call(node,OnloadJs);

我使用节点作为上下文(this(调用eval,因为在onload中运行的js将this设置为当前节点。 无论如何,当 onload 事件包含以下内容时,我遇到了一些问题:

function(){ae.Adrendered(j,Y,0);ae.AdrenderedFinish()}

我得到的错误是:

SyntaxError: Unexpected token (

它是一个匿名函数,有什么想法如何有效地处理它吗?

我认为你不能随意地使用匿名函数表达式,这样解释器就会抛出错误,因为它不是一个命名函数或可以使用匿名函数的上下文。最简单的解决方案是使其成为 IIFE

let Eval = function(str){
return eval(str);
}.call(node,`(${OnloadJs})()`);


注意:以上是一个坏主意,不是一般的解决方案,会增加技术债务。具体回答OP的情况。

最新更新