SO で同様の問題を検索しました (例: Chrome が <div> を非表示にした後に再描画せず、Chrome/Mac で DOM の再描画/更新を強制する) が、どの質問も私の問題の解決策を教えてくれませんでした。私はモデム設定パネル、タブ付きのウェブページを書いています。すべてのタブには、ルーターの構成パネルと同じように、いくつかの設定があります。
構成の保存 (ユーザーが [保存] ボタンをクリックしたときに実行) には数秒かかります (私の組み込みプラットフォームはスピード キングではありません)。そのため、通常は非表示ですが、必要なときに表示される特別な PLEASE WAIT ウィンドウ (正確には div) を配置することにしました。ユーザーを落ち着かせるために:-)。
Firefox ではすべて正常に動作します。[保存] をクリックすると、PLEASE WAIT div が表示され、POST メソッドを使用して構成が保存されます。ただし、Chrome 26 および Chromium 25 では、構成が保存されるまで div は表示されません。SaveConfiguration
構成を保存する PHP スクリプトを実行した後の関数でわかるように、アラートが表示されます。これは、Chrome で PLEASE WAIT div が表示される場所です。Chrome はページを再描画していないようですが、すぐに POST スクリプトの起動を開始します。誰かが同様の問題を抱えていて、この問題を解決する方法はありますか?
以下は私のコードの断片です。私が何をしているかの手がかりを与える可能性のある関数のみを提供しました。それが役立つ場合は、さらにコードを投稿できます。
function showLoadingScreen(yes)
{
if(yes)
{
document.getElementById("loadingtext").innerHTML="Please wait...";
document.getElementById("loading_overlay").style.display="block";
document.getElementById("loading_window").style.display="block";
}
else
{
document.getElementById("loading_overlay").style.display="none";
document.getElementById("loading_window").style.display="none";
}
}
function postDataSync(url, params)
{
var XMLHttpRequestObject = false;
if (window.XMLHttpRequest)
{
XMLHttpRequestObject = new XMLHttpRequest();
} else
if (window.ActiveXObject)
{
XMLHttpRequestObject = new
ActiveXObject("Microsoft.XMLHttp");
}
if(XMLHttpRequestObject)
{
XMLHttpRequestObject.open("POST", url, false);
XMLHttpRequestObject.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
XMLHttpRequestObject.send(params);
{
if (XMLHttpRequestObject.readyState == 4 &&
XMLHttpRequestObject.status == 200)
{
var result = XMLHttpRequestObject.responseText;
delete XMLHttpRequestObject;
XMLHttpRequestObject = null;
return result;
}
}
}
return '';
}
function SaveConfiguration()
{
var errors=checkForm();
if(errors!="")
{
printError("Can't save configuration because there are errors in current tab:<br><br>"+errors);
return;
}
showLoadingScreen(true);
saveTab();
var retval=postDataSync('actions/saveconf3.php','');
alert("Settings saved. The modem is now being reconfigured.");
document.location = "http://" + retval;
}