Asp.net RegisterClientScriptBlock混淆
我的母版网页包含JS代码,可使用自定义jQuery对话框覆盖标准警报Asp.net RegisterClientScriptBlock混淆,asp.net,jquery,client-side,registerclientscriptblock,Asp.net,Jquery,Client Side,Registerclientscriptblock,我的母版网页包含JS代码,可使用自定义jQuery对话框覆盖标准警报 <script type="text/javascript" language="javascript"> window.alert=function(alertMessage) { $.msgbox(alertMessage, {type: "info"}); } </script> 不幸的是,它不起
<script type="text/javascript" language="javascript">
window.alert=function(alertMessage)
{
$.msgbox(alertMessage, {type: "info"});
}
</script>
不幸的是,它不起作用。如果我删除覆盖警报框的JS代码,一切正常,警报框就会出现。重写JS是正确的,如果我在客户端执行alert JS,它可以正常工作,但是如果我尝试从服务器端执行代码,它就不工作
谁能解释一下问题出在哪里 当我试图从aspx页面的page_load事件运行它时,我会遇到同样的问题,但是当我从body onload事件运行它时,它会工作。我认为这是因为页面加载事件发生在window.alert override有机会运行之前 在body标签中尝试以下操作:
<body onload="alert('Your login attempt was not successful. Please try again.');">
顺便说一下,我使用了jQuery UI对话框插件。好的,我找到了问题所在。如果使用RegisterClientScriptBlock注册的代码引用了另一个JS代码,那么我们需要完整加载网页。在RegisterClientScriptBlock中注册的JS似乎在加载到浏览器中时立即执行,无论网页是否加载完整。所以我们需要在网页完全加载后执行代码。我们可以使用下面的jQuery事件来查找它
$(document).ready(function() {
});
完整代码如下所示
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "InvalidPassword",
"$(document).ready(function() {alert(\"Your login attempt was not successful. Please try again.\");})",
true);
很好的解决方案,但这种行为并不特定于RegisterClientBlockScript——javascript总是在浏览器看到它时立即执行,事实上,在处理RegisterStartupScript时,所有浏览器都会阻止所有进一步的呈现和资源请求,在这种情况下也会有所帮助。甚至它可能是异步中最简单的解决方案。脚本有关更多详细信息,请参阅:
$(document).ready(function() {
});
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "InvalidPassword",
"$(document).ready(function() {alert(\"Your login attempt was not successful. Please try again.\");})",
true);