我需要在< 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,它将崩溃)
答案 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之后,以提高负载性能。