我具有以下功能,可将用户代码附加到某些现有代码上,并将其放在<script>
元素中,该元素将附加到html文件的开头。
function generateScript(userCode) {
var genericSetupCode = "updateState(puzzle, 'init-state');"
var goatPuzzleSetupCode = "var puzzle = createGoatPuzzle();var _a = puzzle.passengers, goat = _a[0], cabbage = _a[1], wolf = _a[2], farmer = _a[3];"
var resultToJSONCode = "sessionStorage.setItem('state_list.json',JSON.stringify(states, null, 2))"
//If it exists, delete old user script
const oldUserProg = document.getElementById('user-program')
if(oldUserProg) {
oldUserProg.parentNode.removeChild(oldUserProg)
}
//Append new user script to head
const userProg = document.createElement('script')
userProg.type = 'text/javascript'
userProg.id = 'user-program'
userProg.text = [goatPuzzleSetupCode, genericSetupCode, userCode, resultToJSONCode].join('\n')
document.head.appendChild(userProg)
}
如果userCode
没有任何不成对的撇号或引号,则此方法很好。但是,如果userCode
的引号或撇号不成对,则会出现以下错误(第18行为document.head.appendChild(userProg)
:
当脚本的appendChild()
元素具有不成对的引号时,如何防止text
崩溃。我的目标是让<script>
标记的程序崩溃内部,这样我得到一个包含<anonymous>
的堆栈跟踪,从而表明问题出在用户代码而不是我的码。否则,就无法区分我的代码错误和window.onerror
侦听器中用户代码的错误。