如果text属性具有不成对的引号/撇号,则Javascript appendChild会中断

时间:2018-07-18 03:51:27

标签: javascript dom appendchild script-tag

我具有以下功能,可将用户代码附加到某些现有代码上,并将其放在<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)

Screenshot

当脚本的appendChild()元素具有不成对的引号时,如何防止text崩溃。我的目标是让<script>标记的程序崩溃内部,这样我得到一个包含<anonymous>的堆栈跟踪,从而表明问题出在用户代码而不是我的码。否则,就无法区分我的代码错误和window.onerror侦听器中用户代码的错误。

0 个答案:

没有答案