如何以编程方式将javascript放入块中?

时间:2013-11-19 22:55:06

标签: javascript asp.net registerclientscriptblock

我需要在< head>中完全放置一些javascript页面的块 - 它必须在页面的其余部分之前执行,因为脚本的可能结果是重定向到不同的页面。

但是,当我使用RegisterClientScriptInclude(将一些jQuery放在那里)和RegisterClientScriptBlock用于我使用jQuery的代码时,它将它放在< body>的顶部附近。阻止,它不执行。我无法看到以编程方式将此javascript放入< head>的方法阻止 - 它必须以编程方式,因为有时我不希望它在那里,有时我会这样做。

我试图看看我是否可以直接引用Content1,对应于< head>的asp:Content元素的ID阻止,但没有去。

以防万一有人认为RegisterStartupScript可能有效:它没有。它把它放在< body>中。阻止比其他一切。奇怪的是。

想要一些代码吗?这里:

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,它将崩溃)

3 个答案:

答案 0 :(得分:1)

如果我理解您的问题,您可以在页面内的任何位置插入PlaceHolder控件。

<%@ 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>"));
}

答案 1 :(得分:0)

document.GetElementsByTagName("head")[0].appendChild( newScriptNode );

或jQuery

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

答案 2 :(得分:0)

如果你真的必须在head标签中插入JavaScript,你可以将它作为一个ASP.NET控件并将控件插入到它的子集合中。

E.g。在ASPX文件中:

<head runat="server" id="header">...</head>

在背后的代码中:

header.Controls.Add(new Literal("<script type='text/javascript'>...</script>"));

虽然我认为您需要考虑您的流程,但在呈现页面之前将用户重定向到后端会更有效。

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