초보자를위한 질문은 유감이지만 WebKit 문제와 관련이 있습니다. I는 다음 JS 코드를 가지고HTML의 TextArea 요소를 강제로 업데이트하는 방법은 무엇입니까?
var Module = {
preRun: [],
postRun: [],
print: (function() {
var element = document.getElementById('output');
if (element) element.value = ''; // clear browser cache
return function(text) {
text = Array.prototype.slice.call(arguments).join(' ');
// These replacements are necessary if you render to raw HTML
//text = text.replace(/&/g, "&");
//text = text.replace(/</g, "<");
//text = text.replace(/>/g, ">");
//text = text.replace('\n', '<br>', 'g');
console.log(text);
if (element) {
element.value += text + "\n";
console.log('updated element.value');
element.scrollTop = element.scrollHeight; // focus on bottom
}
};
})
요소는 텍스트 영역 원소 :
<textarea id="output" rows="8"></textarea>
I가 그 함수를 사용 PRINTF 코드가 다음에 사용자 이름을 입력하도록 프롬프트를 나타낸다. 그래서 브라우저 콘솔에서 'updated element.value'가 표시되고 프롬프트 대화 상자가 표시되기 전에 textarea
에 텍스트가 인쇄 될 것으로 예상됩니다.
변경 후 textarea
을 새로 고침하려면 어떻게해야합니까 (element.value += text + "\n"
)?
크롬/파이어 폭스에서는 예상대로 작동하지만 Safari (WebKit)에서는 실패합니다. 프롬프트가 표시되는 순간에는 출력이 표시되지 않습니다. 대화 상자가 표시됩니다.
지연이있는 다른 스레드에서 명령 흐름을 중단하고 동시 실행을 시작하면 바람직하지 않습니다. 배경 (지연 코드)에서 값을 반환하는 방법을 모르겠습니다. – 4ntoine
그래, 쉽게 엉망이되어 최후의 수단이되어야합니다. (지연된 코드에서 실제로 돌아올 수는 없지만 논리를 분할해야합니다. 내가 생각한 "프롬프트 스레드"에서 호출 할 수있는 "이후"청크. –