IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

Silverlight et javascript


Sujet :

Silverlight

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Par défaut Silverlight et javascript
    Bonjour,

    J'expose mon problème,

    Je dispose d'une application Silverlight comportant une div, une frame. Dans cette frame une page html apparait. j'ai incoporé au projet une page Html qui comporte des fonctions javascript. Le problème c'est que je n'arrive pas à accéder aux fonctions javascript de cette page en cliquant sur un bouton.

    Si quelqu'un a la solution ce serait super gentil. (décidément le Silverlight n'est pas ma tasse de thé)

    D'avance merci

  2. #2
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Bonjour,

    C'est du HtmlBridge dont tu as besoin.
    Voici un lien qui devrait t'aider :

    http://msdn.microsoft.com/fr-fr/libr...(v=VS.95).aspx

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Par défaut
    Tout d'abord merci pour ta réponse.

    La fonction javascript ne se trouve pas sur la page html principale (celle créer avec la création du projet), mais sur une page que j'ai incorporé moi même.

    j'ai ce code ci en XAML

    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
    <navigation:Page x:Class="SilverlightApplication5.Home" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
        xmlns:my="clr-namespace:SilverlightApplication5"
        mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"
        Title="Home"
        Style="{StaticResource PageStyle}">
     
        <Canvas x:Name="LayoutRoot">
            <Canvas.Background>
                <LinearGradientBrush>
                    <GradientStop Color="#FFD4D4D4" Offset="0"/>
                    <GradientStop Color="#FF3B3B3B" Offset="1"/>
                </LinearGradientBrush>
            </Canvas.Background>
     
            <StackPanel  Orientation="Horizontal">
                <TextBox x:Name="Adresse" Text="" 
                 Margin="10" Width="400" />
                <Button x:Name="Naviguer" Content="Go" Margin="10" 
                Click="Naviguer_Click"  />
                <Button x:Name="ChargerJavascript" Content="Lancer" Click="ChargerJavascript_Click"/>
     
            </StackPanel>
    <my:HtmlDisplay x:Name="html" Canvas.Top="50" 
                      Canvas.Left="10" Height="700" 
                      Width="800" />
     
        </Canvas>
    </navigation:Page>
    et dans ma classe HtmlDisplay je met cette ligne ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HtmlPage.window.Invoke("test");
    ce qui permet d'éxécuter la fonction javascript test qui se trouve dans la page principale, mais j'aimerais appeler la méthode test depuis une autre page html.


    Merci

  4. #4
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Je pense que tu devrais mettre un nom à ta frame. tu peux par exemple créer dans ta page principale une fonction javascript qui appelle la méthode de la frame.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // javascript
    function CallTest()
    {
    getElementByID("MaFrame").test();
    }
    Puis en Silverlight tu invoques CallTest.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Par défaut
    Ma frame à un nom dans mon HtmlDisplay.


    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
    public class HtmlDisplay : ContentControl
        {
            private HtmlElement div;
            private HtmlElement iFrame;
            public HtmlDocument htmlDocument = HtmlPage.Document;
     
            public HtmlDisplay()
            {
                this.Loaded += new RoutedEventHandler(HtmlDisplay_Loaded);
            }
     
            void HtmlDisplay_Loaded(object sender, RoutedEventArgs e)
            {
     
     
                div = htmlDocument.CreateElement("div");
                div.Id = "monDiv";
                div.SetStyleAttribute("position", "absolute");
                div.SetStyleAttribute("height", this.Height.ToString() + "px");
                div.SetStyleAttribute("width", this.Width.ToString() + "px");
                GeneralTransform gt = this.TransformToVisual(Application.Current.RootVisual);
                Point position = gt.Transform(new Point(0, 0));
                div.SetStyleAttribute("left", position.X + "px");
                div.SetStyleAttribute("top", position.Y + "px");
                iFrame = htmlDocument.CreateElement("iframe");
                iFrame.Id = "monIFrame";
                iFrame.SetProperty("frameborder", "no");
                iFrame.SetStyleAttribute("height", this.Height.ToString() + "px");
                iFrame.SetStyleAttribute("width", this.Width.ToString() + "px");
                iFrame.SetStyleAttribute("position", "relative");
                div.AppendChild(iFrame);
                htmlDocument.Body.AppendChild(div);
                //htmlDocument.GetElementById("monIFrame").Invoke("test");
     
            }
    }

  6. #6
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Tu veux invoquer "Test" tout de suite après le chargement de la page ou à la demande ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Par défaut
    A la demande.

  8. #8
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    d'accord. La méthode par fonction javascript que je t'ai donné ne fonctionne pas ?

    et celle là non plus ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    htmlDocument.GetElementById("monIFrame").Invoke("test");

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Par défaut
    Non, je dois mal m'expliquer je recommence à 0.


    j'ai mon xaml ou je met mes boutons textbox etc...

    j'ai fais un espace pour pouvoir mettre une classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <my:HtmlDisplay x:Name="html" Canvas.Top="50" 
                      Canvas.Left="10" Height="700" 
                      Width="800" />
    dans la classe HtmlDisplay je creer une div ainsi qu'une frame et j'affiche une page url de mon site (qui est en localhost)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iFrame.SetAttribute("src", "http://localhost...")

    qui fonctionne très bien.

    Je veux appeler une fonction javascript, quand celle-ci se trouve sur la page web creer par le projet (donc la page principale SilverlightApplication12.aspx) le HtmlPage.Window.Invoke("test") fonctionne. Maintenant je creer une page aspx ou Html peut importe ou je met ma fonction JavaScript mais Html.Window.Invoke signale que la fonction ne peut être appelée normal puisqu'il charge la page principale est qu'elle n'y est pas.


    J'aimerai donc aller chercher la fonction javascript qui se trouve sur une autre page html que la principale.

  10. #10
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Oui, j'avais bien compris ton problème.

    as-tu essayé d'implémenter ceci, comme je te l'avais suggéré, dans ta page principale en javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // javascript
    function CallTest()
    {
    //appel dans MaFrame
    getElementByID("MaFrame").test();
    }
    puis d'invoquer en Silverlight :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HtmlPage.Window.Invoke("CallTest");

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Par défaut
    Fonctionne pas il me dit
    Echec lors de l'appel CallTest.
    Mais j'ai une erreur juste avant qui dit
    Cette page web contient des erreurs qui risque d'empêcher son affichage
    Quand j'utilise le debug ça me dit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getElementByID("monIFrame").test();
    Objet innattendu

  12. #12
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    oui en fait c'est un problème javascript et non Silverlight mais bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <script language="javascript" type="text/javascript">
        function CallTest() {	            
            d = document;
            f = d.frames ? d.frames['maFrame'] : d.getElementById('maFrame');
            // appel de la fonction Test dans Test.htm
            f.Test();
        }
    </script>
     
    <iframe id="maFrame" name="maFrame" src="Test.htm" width="200" height="200"></iframe>

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Par défaut
    ça fonctionne! Merci bien. Le souci c'est que le javascript sera appelé quand l'utilisateur clic sur un bouton et il doit avoir des effets sur la frame moniframe que j'ai décrit dans mon code HtmlDisplay!

  14. #14
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    donc tu dois maintenant appeler une méthode Silverlight à partir de javascript c'est bien cela ?

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Par défaut
    hum j'ai mon SIlverlight ou j'ai mis une iframe comme je t'ai montré

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         iFrame = htmlDocument.CreateElement("iframe");
                iFrame.Id = "monIFrame";
                iFrame.SetProperty("frameborder", "no");
                iFrame.SetStyleAttribute("height", this.Height.ToString() + "px");
                iFrame.SetStyleAttribute("width", this.Width.ToString() + "px");
                iFrame.SetStyleAttribute("position", "relative");
                div.AppendChild(iFrame);
    j'attribu à la frame une page html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iFrame.SetAttribute("src", "http://localhost:6559/WebSite5/site.html");
    dans ce .html il y a des fonctions javascript qui doivent être appelé quand une personne clic sur un bouton par exemple ou pour l'instant au démarrage de l'application.

  16. #16
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Je tiens quand même à dire que les frames c'est le mal!

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Par défaut
    Avant j'avais utiliser un composant web browser sauf que le composant web browser doit être obligatoirement utiliser en Out Of Browser et qu'il serait impossible de ce que j'ai lu d'utiliser du javascript en Out Of Browser

  18. #18
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Il faut récuperer l'objet window de ton iframe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HtmlWindow iframe=HtmlPage.Document.GetElementById("monIFrame").GetProperty("contentWindow") as HtmlWindow ;
    iframe.Invoke("test");
    Tant qu'a faire, recupère directement ton iframe dans ton htmlDisplay.

Discussions similaires

  1. [Silverlight OOB] Javascript appele fonction C#
    Par GeoffreyKr dans le forum Silverlight
    Réponses: 1
    Dernier message: 12/03/2013, 14h08
  2. Appeler méthode Silverlight depuis javascript
    Par Mozofeuk dans le forum Silverlight
    Réponses: 2
    Dernier message: 29/07/2009, 11h38
  3. Silverlight + Ajax (Javascript)
    Par cyberbobby dans le forum Silverlight
    Réponses: 8
    Dernier message: 23/05/2009, 09h57
  4. API Javascript + Silverlight
    Par Mozofeuk dans le forum Silverlight
    Réponses: 6
    Dernier message: 23/10/2008, 10h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo