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

时间:2018-08-15 14:19:27

标签: javascript html

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

let Eval = function(str){

            return eval(str);
        }.call(node,OnloadJs);

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

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

我得到的错误是:

SyntaxError: Unexpected token (

它具有匿名功能,有什么想法如何有效地处理它?

1 个答案:

答案 0 :(得分:1)

我认为您不能随意编写匿名函数表达式,所以解释器将抛出错误,因为它不是命名函数,也不是可以使用匿名函数的上下文。最简单的解决方案是使其成为IIFE

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


注意:以上是一个坏主意,而不是一般的解决方案,并且增加了技术负担。针对OP情况的具体答案。