Javascript 在正确的上下文中执行Onload属性js
我正在处理覆盖document.write的任务。对document.write的调用来自第三方js,因此是的,我知道它很糟糕,除了广告,没有人使用它: 因此,在其中一个document.write调用中,html字符串包含一个设置了onload属性的iframe,并且因为我使用的是appendChild而不是document.write,所以当我附加iframe时,我需要在代码进行多次修改后执行onload js。 我试过这样做:Javascript 在正确的上下文中执行Onload属性js,javascript,html,Javascript,Html,我正在处理覆盖document.write的任务。对document.write的调用来自第三方js,因此是的,我知道它很糟糕,除了广告,没有人使用它: 因此,在其中一个document.write调用中,html字符串包含一个设置了onload属性的iframe,并且因为我使用的是appendChild而不是document.write,所以当我附加iframe时,我需要在代码进行多次修改后执行onload js。 我试过这样做: let Eval = function(str){
let Eval = function(str){
return eval(str);
}.call(node,OnloadJs);
我使用节点作为上下文调用eval,因为在onload中运行的js将this设置为当前节点。无论如何,当onload事件包含以下内容时,我遇到了一些问题:
function(){ae.Adrendered(j,Y,0);ae.AdrenderedFinish()}
我得到的错误是:
SyntaxError: Unexpected token (
这是一个匿名函数,有没有办法有效地处理它 我不认为您可以随意使用匿名函数表达式,因此解释器会抛出一个错误,因为它不是一个命名函数,也不是一个可以使用匿名函数的上下文。最简单的解决办法就是让它成为一种生活
let Eval = function(str){
return eval(str);
}.call(node,`(${OnloadJs})()`);
注意:以上是一个坏主意,不是一个通用的解决方案,并增加了技术债务。OP情况的具体答案。该代码应该做什么?它试图声明一个没有标识符的函数,使其不可调用。给它一个带有函数x{…}的标识符可以避免语法错误,但是如果没有人调用它,则不清楚该将标识符设置为什么…这是无效代码,因此使用与浏览器相同的方法处理它;不要运行它。@Jacob这不是我的代码,因为我说过这是第三方js,如果我正常运行js,代码执行很好,所以我需要模拟onload执行非常感谢!我仍然持有正确的结论,对吗?它应该能够解决ae,因为它在父范围内。您可以将调用从${OnloadJs}更改为${OnloadJs}。如果您真的愿意,可以调用此函数,但这应该是不必要的。因此,我决定保留我的方法,但我遇到了另一个问题,iframe onload包含如下内容。contentWindow.postmessagewindow,。。。。。在我的方法中,这是iframe节点,这很好,但窗口对象是主页的窗口,而不是包含第二个带onload的iframe的iframe,您知道如何使用正确的this传递正确的窗口吗?