【发布时间】:2013-11-19 22:55:05
【问题描述】:
我需要在页面的
块中绝对放置一些 javascript -- 它必须在页面的其余部分之前执行,因为脚本的可能结果是重定向到不同的页面。但是,当我对使用 jQuery 的代码使用 RegisterClientScriptInclude(在其中放置一些 jQuery)和 RegisterClientScriptBlock 时,它会将其放在
块的顶部附近,并且不会执行。我看不到以编程方式将此 javascript 放入 块的方法——它必须以编程方式进行,因为有时我不希望它在那里,有时我会。我试过可以直接引用Content1,
块对应的asp:Content元素的ID,但是不行。以防万一有人认为 RegisterStartupScript 可能有效:它没有。它在
块中的位置比其他所有内容都低。很奇怪。想要一些代码?这里:
Type csType = this.GetType();
ClientScriptManager clientScript = Page.ClientScript;
if (!clientScript.IsClientScriptIncludeRegistered(jqueryScriptName))
{
clientScript.RegisterClientScriptInclude(jqueryScriptName, "~/Scripts/jquery-1.7.1.min.js");
}
if (!clientScript.IsClientScriptBlockRegistered(citrixDetectorScriptName))
{
clientScript.RegisterClientScriptBlock(csType, citrixDetectorScriptName, citrixDetectorScriptText, true);
}
根据大众需求,我如何检测 ActiveX 组件。这是 JScript。
try {
var icaObj = new ActiveXObject("Citrix.ICAClient");
var CitrixVersion = icaObj.ClientVersion.split(".");
var MajorMinorVersion = CitrixVersion[0] + "." + CitrixVersion[1];
if (MajorMinorVersion == "11.0") {
// Citrix is OK
}
else {
window.navigate("WrongCitrix.aspx?Citrix=" + MajorMinorVersion);
}
}
catch (e) {
window.navigate("NoCitrix.aspx");
}
如果 ActiveX 组件不存在,则重定向是一个告诉用户他们需要安装它的页面。如果 ActiveX 组件是 11.0 以外的任何其他版本,则重定向到一个页面,该页面解释了这一点以及如何处理这种情况(例如 backrevving)。
在页面加载检查期间进行事先检查,以确保它们具有 Internet Explorer v4 到 v9,因为任何其他版本都无法与该产品一起使用(如果 IE10+ 甚至尝试加载 ActiveX 组件的 v11.0,它也会崩溃) .
【问题讨论】:
-
为什么要等到页面渲染完毕再使用JavaScript重定向?保存自己的回复并在后端使用
Server.Transfer。 -
如果用户禁用了脚本???没有意义
-
我不想等待页面呈现,@codemonkeh,这就是问题所在!进入头部的 javascript 尝试检测客户端工作站上是否存在某个 ActiveX 组件。如果没有,用户将被重定向(通过 window.navigate)到另一个页面,该页面解释了问题并提供了有关如何安装 ActiveX 组件的信息。如果 javascript 不在 head 块中,即使在页面呈现后它也不会执行。
-
@charlietfl,如果用户禁用了脚本,那么他们将无法使用该页面作为门户的产品。就是这么简单。这是一个公司内部网,而不是公共网络。我们的方式或高速公路。抱歉,如果这对您没有意义,但没必要。
-
@Cyberherbalist 我的观点是,通过等待在回发中修改 JavaScript,您无论如何都会呈现页面(即使只是标题)。但我确实明白你的意思。
标签: javascript asp.net registerclientscriptblock