脚本标签中的 onload 事件未触发

onload event in script tag not firing

作为序言,我查看了 SO 上有关此问题的现有帖子,我相信我的代码包含了所有建议的修复,但它仍然不起作用。

我正在尝试触发一个简单的 onload 事件:

var test = function() {
    console.log("Script loaded! V2")
}

//Append new user script to head 
const userProg = document.createElement('script')
userProg.type = 'text/javascript'
userProg.id = 'user-program'

userProg.addEventListener('load', test, false)
userProg.onload = function() {
    console.log("Script loaded! V1")
}

userProg.text = [goatPuzzleSetupCode, genericSetupCode, userCode, resultToJSONCode].join('\n')
document.head.appendChild(userProg)

令人沮丧的是,我之前已经触发了 onload 事件,但我没有它运行时的代码副本。所以我不确定是什么问题。

Onload 不适用于您的情况,因为 内联脚本没有可加载的内容 它适用于 脚本下载remote scripts.

但是remote scripts还需要注意一件事:

需要在onload事件后设置src属性。

//Append new user script to head 
var goatPuzzleSetupCode=  console.log("Script goatPuzzleSetupCode");
var genericSetupCode=  console.log("Script genericSetupCode");
var userCode=  console.log("Script userCode");
var resultToJSONCode=  console.log("Script resultToJSONCode");
var userProg = document.createElement('script');


var script="//cdnjs.cloudflare.com/ajax/libs/less.js/1.3.3/less.min.js";
//userProg.addEventListener('load', test, false);
userProg.onload = function(script) {
    console.log("Script loaded! 1"+script)
 test();
};
userProg.src=script;
userProg.text = [goatPuzzleSetupCode, genericSetupCode, userCode, resultToJSONCode].join('\n')
document.head.appendChild(userProg);


 
 var test = function() {
    console.log("Script loaded! 2")
}

听起来您正在寻找类似 afterscriptexecute 的事件,不幸的是,它是非标准的,不应使用。但是,因为您已经直接插入了脚本文本,假设附加的脚本不包含错误,将其他内容添加到触发 window 函数的文本应该足够简单。例如:

window.scriptLoaded = function() {
    console.log("Script loaded! V2")
}
const text1 = 'console.log("script1 running")';
const text2 = 'console.log("script2 running")';
//Append new user script to head 
const userProg = document.createElement('script')
userProg.text = [text1, text2, 'scriptLoaded();'].join('\n');
document.head.appendChild(userProg)

(onload 不起作用,因为正如评论所说:

The onload is for when the element loads. i,e finished downloading.

但是没有 src 的脚本就没有任何东西可以下载)