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