Ich muss unbedingt Javascript in den -Block der Seite einfügen - es muss vor dem Rest der Seite ausgeführt werden, da ein mögliches Ergebnis des Skripts darin besteht, auf eine andere Seite umzuleiten.

Wenn ich jedoch RegisterClientScriptInclude (um dort etwas jQuery einzufügen) und RegisterClientScriptBlock für meinen Code verwende, der jQuery verwendet, wird es nahe am oberen Rand des -Blocks platziert und nicht ausgeführt. Ich sehe keine Möglichkeit, dieses Javascript programmgesteuert in den -Block einzufügen - es muss programmgesteuert sein, weil ich es manchmal nicht dort haben möchte und manchmal auch.

Ich habe versucht zu sehen, ob ich direkt auf Content1 verweisen kann, die ID des asp: Content-Elements, das dem -Block entspricht, aber nicht.

Nur für den Fall, dass jemand denkt, dass RegisterStartupScript funktionieren könnte: das tut es nicht. Es setzt es tiefer in den -Block als alles andere. Seltsamerweise.

Willst du einen Code? Hier:

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);
}

Auf vielfachen Wunsch erkenne ich die ActiveX-Komponente. Dies ist 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");
}

Wenn die ActiveX-Komponente nicht vorhanden ist, ist die Umleitung eine Seite, die dem Benutzer mitteilt, dass er sie installieren muss. Wenn es sich bei der ActiveX-Komponente um eine andere Version als 11.0 handelt, wird auf eine Seite umgeleitet, auf der dies und der Umgang mit der Situation erläutert werden (z. B. Backrevving).

Eine vorherige Überprüfung während des Ladens der Seite überprüft, ob Internet Explorer v4 bis v9 vorhanden ist, da jede andere Version nicht mit dem Produkt funktioniert (und IE10 + stürzt ab, wenn sogar versucht wird, v11.0 der ActiveX-Komponente zu laden).

1
Cyberherbalist 20 Nov. 2013 im 02:55

3 Antworten

Beste Antwort

Wenn ich Ihre Frage verstehe, können Sie das PlaceHolder-Steuerelement an einer beliebigen Stelle auf der Seite einfügen.

<%@ 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
Win 19 Nov. 2013 im 23:28

Wenn Sie wirklich JavaScript in das Head-Tag einfügen müssen, können Sie es einfach zu einem ASP.NET-Steuerelement machen und ein Steuerelement in die untergeordnete Sammlung einfügen.

Z.B. In der ASPX-Datei:

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

Im Code dahinter:

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

Obwohl ich denke, dass Sie über Ihren Prozess nachdenken müssen, wäre es effizienter, den Benutzer im Back-End umzuleiten, bevor die Seite gerendert wird.

Oh und RegisterStartupScript platziert Ihr JavaScript korrekt nach Ihrem HTML-Code, um die Ladeleistung zu erhöhen.

0
codemonkeh 19 Nov. 2013 im 23:03
document.GetElementsByTagName("head")[0].appendChild( newScriptNode );

Oder jQuery

$("head")[0].append( newScriptNode );
0
Dai 19 Nov. 2013 im 23:02