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

时间:2018-07-19 04:06:42

标签: javascript onload script-tag

首先,我在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事件,但是我没有代码运行时的副本。所以我不确定是什么问题。

2 个答案:

答案 0 :(得分:1)

听起来您正在寻找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不起作用,因为如评论所述:

  

onload用于元素加载时。我完成下载。

但是没有src可供下载的脚本是没有的)

答案 1 :(得分:0)

Onload在您的情况下不起作用,因为内嵌脚本没有什么可加载的 它适用于将要下载的脚本,即{ {1}}。

不过,remote scripts还需要注意1件事:

remote scripts事件之后需要设置src属性。

onload