如何以编程方式将javascript放入<;头>;块

如何以编程方式将javascript放入<;头>;块,javascript,asp.net,registerclientscriptblock,Javascript,Asp.net,Registerclientscriptblock,我需要将一些javascript完全放在页面块中——它必须在页面其余部分之前执行,因为脚本的一个可能结果是重定向到另一个页面 但是,当我对使用jQuery的代码使用RegisterClientScriptInclude(将一些jQuery放在其中)和RegisterClientScriptBlock时,它会将其放在块的顶部附近,并且不会执行。我找不到一种方法可以通过编程将这个javascript放入块中——它必须是通过编程实现的,因为有时我不希望它出现在块中,有时我确实希望它出现在块中 我试着看

我需要将一些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以外的任何其他版本,则重定向到一个页面,该页面解释了这一点以及如何处理这种情况(例如反向浏览)

在页面加载检查期间进行的一次事先检查,以确保他们具有Internet Explorer v4到v9,因为任何其他版本都不能与该产品一起使用(如果IE10+尝试加载ActiveX组件的v11.0,它将崩溃)

或jQuery

$("head")[0].append( newScriptNode );

如果您真的必须将JavaScript插入head标记,那么您可以将其设置为ASP.NET控件,并将控件插入到其子集合中

例如,在ASPX文件中:

<head runat="server" id="header">...</head>
。。。
在代码隐藏中:

header.Controls.Add(new Literal("<script type='text/javascript'>...</script>"));
header.Controls.Add(新文本(“…”);
虽然我确实认为您需要考虑您的流程,但在呈现页面之前在后端重定向用户会更有效


哦,
RegisterStartupScript
正确地将JavaScript放在html之后,以提高加载性能。

如果我理解您的问题,您可以在页面中的任何位置插入占位符控件

<%@ Page Language="C#" AutoEventWireup="True" 
   CodeBehind="Default.aspx.cs" Inherits="WebApplicationTelerik.Default" %>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script type="text/javascript" 
    src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <asp:PlaceHolder runat="server" ID="PlaceHolder1"></asp:PlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    </form>
</body>
</html>

protected void Page_Load(object sender, EventArgs e)
{
    PlaceHolder1.Controls.Add(new LiteralControl(
       "<script type=\"text/javascript\"> alert('here'); </script>"));
}

受保护的无效页面加载(对象发送方、事件参数e)
{
占位符1.Controls.Add(新的LiteralControl(
“警报(‘此处’;”);
}

为什么要等到页面呈现后再使用JavaScript重定向?保存一个响应并在后端使用
Server.Transfer
。如果用户禁用了脚本???没有意义,老师不想等待页面呈现,@codemonkeh,这就是问题所在!进入头部的javascript试图检测客户端工作站上是否存在某个ActiveX组件。如果没有,用户将被重定向(通过window.navigate)到另一个页面,该页面将解释问题并提供有关如何安装ActiveX组件的信息。如果javascript不在head块中,则即使在呈现页面后也不会执行。@charlietfl,如果用户禁用了脚本,则无法使用该页面作为门户的产品。就这么简单。这是一个公司内部网,不是公共网站。我们的路还是高速公路。如果这对您没有意义,很抱歉,但它不需要。@Cyberherbalist我的观点是,通过等待修改回帖中的JavaScript,您将呈现页面(即使只是标题)。但我明白你的意思。在呈现页面之前,我不知道他们是否安装了ActiveX组件。在我上面展示的javascript代码片段实际在客户端上运行之前,我不知道这一点。除非您知道IIS在向客户端发送任何数据之前读取客户端的方法?这些方法很简单,但我遇到了与以前相同的问题,因为我无法在设计时知道是否可以添加脚本--并且在运行时使用RegisterClientScriptBlock方法有条件地添加脚本会将脚本放入主体中,不是页眉,这很有效。谢谢,我不知道占位符控件可以用于此!
<%@ Page Language="C#" AutoEventWireup="True" 
   CodeBehind="Default.aspx.cs" Inherits="WebApplicationTelerik.Default" %>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script type="text/javascript" 
    src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <asp:PlaceHolder runat="server" ID="PlaceHolder1"></asp:PlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    </form>
</body>
</html>

protected void Page_Load(object sender, EventArgs e)
{
    PlaceHolder1.Controls.Add(new LiteralControl(
       "<script type=\"text/javascript\"> alert('here'); </script>"));
}