L'appel d'Une fonction Javascript à partir de Silverlight
Je suis d'essayer d'appeler une fonction javascript (dans notre code) à partir d'un contrôle silverlight. Je suis d'essayer d'appeler la fonction via:
HtmlPage.Window.Invoke("showPopup", new string[] { "http://www.example.com" });
et je reçois le message d'erreur "impossible d'Appeler: showPopup"
Je peux appeler HtmlPage.Window.Invoke("alert", new string[]{"test"});
sans problème, mais pas de mon propre fonction.
Je peux aussi ouvrir la page en question, en plus de la barre d'outils de développement et manuellement appel showPopup("http://www.example.com")
et il fonctionne comme prévu.
De sorte que le js fonctionne, et Silverlight binaire peut trouver d'autres fonctions js. Ce qui me manque ici?
Remarques Supplémentaires:
- L'appel de la fonction est dans un event handler, c'est ce qui arrive après la page (le script) ont été chargés)
OriginalL'auteur Ryan | 2009-02-10
Vous devez vous connecter pour publier un commentaire.
Aha! J'ai pensé à elle. Notre application utilise une iframe, donc le rendu html ressemble à quelque chose comme ceci
Et le contrôle Silverlight en question est dans l'iframe. Le problème est que le fichier qui contient le
showPopup
fonction a été référencé à l'extérieur<head>
(pourquoi j'ai pu appeler la fonction avec la barre d'outils IE), mais pas l'intérieur<head>
. L'ajout d'une référence au fichier dans l'iframe<head>
résolu le problème.Sorte de décevante, mais merci pour toute l'aide.
OriginalL'auteur Ryan
Fait référence le script à nouveau à partir de l'iframe n'est pas le moyen le plus efficace de code de référence contenues dans le parent. Si votre fonction est appelée "showPopup", vous pouvez insérez dans votre iframe:
Et voilà. L'explication à cela est que tous les "global" les fonctions et les objets font partie de cet "espace de noms global"... ce qui est de la "fenêtre" de l'objet. Donc, si vous essayez d'accéder à "global" de fonctions à partir d'un enfant, vous devez appeler la fonction sur le parent (e.g parent.showPopup('....')) ou déclarer un alias local (qui est ce que nous faisons dans l'exemple ci-dessus).
Cheers!
OriginalL'auteur Oli
Est le showPopup fonction javascript sur le même code html ou page aspx comme le contrôle Silverlight? Vous obtiendrez normalement "impossible d'Appeler ..." d'erreur si la fonction javascript n'existe pas:
Quel navigateur utilisez-vous lorsque vous êtes l'obtention de ce problème?
Êtes-vous à l'aide de la dernière version de Silverlight?
Êtes-vous à l'aide de la ScriptableType attrbiute n'importe où?
Est-il possible d'afficher le code pour une courte mais complète du programme qui provoque ce problème à le faire sur votre machine...
OriginalL'auteur Peter McG
Assurez-vous que votre script est complètement chargée avant d'essayer d'invoquer des fonctions.
OriginalL'auteur Andreas Grech
Voici comment je le fais. Mais je suis de la création de silverlight sans visual studio. J'ai juste du html brut, xaml, et js (javascript). Avis MouseLeftButtonUp et c'est la valeur "LandOnSpace"
}
OriginalL'auteur Neo42
J'ai eu le même problème dans VS 2010 avec le SL 4. J'avais créé quelques méthodes et de les mettre dans un seul fichier JS. Cependant, ce fichier n'a pas été ajouté à la section d'en-tête du fichier ASPX. Ajout il a résolu le problème. La différence est que, bien que je n'ai pas de séparer la section de la tête dans l'iframe, j'ai eu le problème et résolu.
OriginalL'auteur Harish