1

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

但是,当我对使用 jQuery 的代码使用 RegisterClientScriptInclude(在其中放置一些 jQuery)和 RegisterClientScriptBlock 时,它会将其放在 <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 以外的任何其他版本,则重定向到一个页面,该页面解释了这一点以及如何处理这种情况(例如 backrevving)。

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

4

3 回答 3

3

如果我理解您的问题,您可以在页面内的任何位置插入 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>"));
}
于 2013-11-19T23:28:02.207 回答
0
document.GetElementsByTagName("head")[0].appendChild( newScriptNode );

或 jQuery

$("head")[0].append( newScriptNode );
于 2013-11-19T23:02:35.580 回答
0

如果您确实必须将 JavaScript 插入到 head 标记中,您可以将其设为 ASP.NET 控件并将控件插入到它的子集合中。

例如在 ASPX 文件中:

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

在后面的代码中:

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

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

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

于 2013-11-19T23:03:24.300 回答