很抱歉新手问题,但它与WebKit问题有关。我有下一个JS代码:
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元素:
<textarea id="output" rows="8"></textarea>
我有使用该函数的printf代码,然后显示提示输入用户名。
所以我希望看到更新的element.value&#39;在显示提示对话框之前,在textarea
中的浏览器控制台和打印文本中。
我如何在textarea
更改后强制element.value += text + "\n"
进行刷新?
它在chrome / firefox中按预期工作但在Safari(WebKit)中失败 - 我无法看到当前输出提示对话框。
答案 0 :(得分:1)
对我而言,听起来似乎无法完成,但可能存在我不了解的Webkit特定黑客攻击。也许所有浏览器都会在您期望的相同渲染周期内进行两次更新,但Safari会首先显示提示并以某种方式暂停其余更新,直到提示被取消。
最明显的解决方法是
print('lorem ipsum');
setTimeout(function(){
var response = prompt('my question here');
//handle the response
}, 10);
这可能保证textarea更新在提示锁定之前发生。