저는 초보자 프로그래밍을 가르치는 사이트를 만들고 있습니다. 편집기에서 코드를 작성하고 실행 버튼을 클릭하면 웹 작업자가 상속 코드를 실행하기 시작합니다.웹 작업자를위한 사용자 코드를 확인하고 묻습니다.
the comments for this question에 대답했습니다. eval()
을 사용할 수 없습니다.
내 질문은 지금, alert()
, prompt()
및 confirm()
대화 상자가 잘 작동하는 기능을 정의했습니다. 그러나 후자의 반환 값은 웹 작업자에게 반환되지 않습니다. return
을 추가하더라도 Cannot read property 'toString' of undefined
이 반환 값을 처리하도록 코드를 수정할 수 있습니까?
전체 코드 :
var userCode = editor.getValue();
// append functions and variables for drawing on Canvas
var codeWithMessages = '\n\
function print (data) { postMessage(["print", data.toString()]); } \n\
function println(data) { postMessage(["print", data.toString() + "\\n"]); } \n\
function alert (data) { postMessage(["alert", data.toString()]); } \n\
function confirm(data) { return postMessage(["confirm", data.toString()]); } \n\
function prompt (data) { return postMessage(["prompt", data.toString()]); } \n\
\n\
...
' + userCode;
var codeWithMessagesAndExitValues = codeWithMessages + "..."
// handle messages, calling window functions or exit and handle user return vars
outer.worker.addEventListener('message', function (event) {
var method = event.data[0] || null;
var data = event.data[1] || null;
if (method == "canvas") {
// call canvas methods
}
else if(method == "exit") {
// close the worker and handle user variables
}
else if(method == "alert") {
alert(data);
}
else if(method == "confirm") {
confirm(data);
}
else if(method == "prompt") {
prompt(data);
}
else if(method == "print") {
if ($("#run-output").text() == editorController.noOutputMsg)
$("#run-output").text("");
$("#run-output").append(data);
}
사용자 코드의
최소 예 :
이print(prompt("Enter your name:"));
(아무것도 입력하면 위의 오류를 줄 것이다)
http://pastebin.com/bnE128DE관련 부분이 runCode()
방법에
코드를 인터넷에 다른 위치에 배치하는 대신 코드의 해당 부분을 질문에 게시하십시오. – Bergi
어쨌든 비동기 메시지에서 동 기적으로'return '할 수 없습니다. – Bergi
관련 부분은 상당히 긴'runCode()'메소드에 있습니다. 나는 그것을 지금 무너 뜨리려고 노력하는 것에 그것을 줬다. –