Maintenant j'ai un problème lié à OpenLayers mais c'est hors sujet...
En tous cas, je respire enfin ! merci beaucoup
=> RESOLU
Maintenant j'ai un problème lié à OpenLayers mais c'est hors sujet...
En tous cas, je respire enfin ! merci beaucoup
=> RESOLU
Malheureusement mon problème n'est pas complètement résolu.
Prenons un exemple :
Sur la page aspx, j'ai trois fonctions javascript : init() qui est chargée lors du chargement du body. Les deux autres fonctions sont appelées à partir du code behind.
Ce que je voudrais faire, c'est exécuter init() avant ces deux fonctions. Le problème est qu'elles s'exécutent après...
Sauriez-vous comment faire ? A savoir que j'ai un script manager déclaré sur ma page aspx.
Page ASPX :
Page CS :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Page sans titre</title> <script type="text/javascript"> var variable1, variable2; function init() { var string = "voila un autre test du body"; alert (string); } function test() { var i = "voila le test"; alert(i); } function ecrire(vari1, vari2) { variable1 = vari1; variable2 = vari2; alert(variable1 + variable2); } </script> </head> <body onload="init()"> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <div> <script type="text/javascript">test();</script> </div> </form> </body> </html>
Je pense que c'est le "RegisterStartupScript" qu'il faut changer. J'ai essayé plusieurs méthodes du script manager (Page.ClientScript) mais init() est toujours exécuté en dernier...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string a = "première variable behind"; string b = "deuxième variable behind"; string script = "<script type=\"text/javascript\">ecrire('" + a + "'" + "," + "'" + b + "');</script>"; Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "scriptTest", script); } }
Merci.
Tu exposes maintenant un problème différent du problème initial. La succession des questions nuit à la lisibilité de la discussion.Malheureusement mon problème n'est pas complètement résolu.
Soit tu fais un appel successif des fonctions dans le onload, soit tu sors la fonction init() du onload pour la mettre avant les autres dans la page.
Le problème, c'est que tu mixes bien trop de méthodes pour que ton développement soit cohérent : un appel déclaré dans la page .aspx sur le onload, un appel déclaré dans la page .aspx dans un div (?) et un enregistrement d'appel dans le code behind.
Rationalise un peu tout ça ! Regroupe tes déclarations d'appels.
Si tu veux déclarer des appels de fonctions dans le onload du body depuis le code behind, c'est très facile :
Dans la page aspx :
Dans la page de code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <body id="myBody" runat="server">
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 this.myBody.Attributes.Add("onload", "javascript:alert('Body onload !');");
C'est exactement le contraire de ce que je veux faire. En plus, j'ai une page maitre. J'ai pas accès à this.myBody. De toute façon, ca me servirait à rien. Ce que je veux, ce n'est pas appeler le body a partir du code behind c'est le contraire : appeler des fonctions c# (behind) au onload du body (si possible) sinon après le onload (ce qui serait plus intéressant).
Tu me dis de rationaliser mon code... je travaille avec OpenLayers. Si je ne mets pas le init() dans le onload du body, la carte ne se charge pas. Toutes les fonctions appelées après, effectuent des traitements sur la carte. Donc ces fonctions doivent s'exécuter après le init(). Avec mon code en behind, ces fonctions s'exécutent avant. J'ai testé chaque instruction avec des 'alert' et c'est ce que j'ai remarqué.
En tous cas merci bcp
Solution :
J'ai supprimé onload="init()" du body et j'ai mis ce code à la fin de mon script manipulant OpenLayers :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 if (window.attachEvent) { // msie, opera; window.attachEvent("onload",init); } else if (window.addEventListener) { // mozilla; window.addEventListener("load",init,true); }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager