Silverlight 통신 1(Javascript)
Silverlight / 2008. 12. 10. 17:34
이 글은 두 가지의 주제로 이루어져 있다.
첫 번째는 Javscript -> Silverlight 이고
두 번째는 Silverlight -> Javascript 이다
첫 번째 Javascript 에서 Silverlight 로의 통신은 페이지를 만들 때 Full Silverlight 는 거의 없다.
html 페이지에서 일부분을 Silverlight 로 꾸미게 된다.
그럴 때 html 페이지에서 실버라이트의 상태를 바꾸고자 할 때 이용된다.
총 4단계를 거쳐서 Javascript 에서 Silverlight 로의 통신이 이루어져 진다.
1단계 : script 를 사용할 클래스에 System.Windows.Browser namespace 의 [ScriptableType] Attributte 를 설정해준다.
그리고 script 를 사용할 멤버 메소드에 [ScriptableMember] Attributte를 설정해 준다.
2단계 : 해당 클래스 생성자에 HtmlPage.RegisterScriptableObject("scriptKey", this);코드를 넣어준다.
--> 첫 번째 매개변수는 스크립트를 등록을 하게 되는 키를 나타내고 두 번째 매개변수는 스크립트를 적용할 개체(Object)이다.
1단계와 2단계 예제 소스
[ScriptableType] //스크립트 사용할 클레스에 선언 [ScriptableMember] // 스크립트 사용할 메소드 |
3단계 : 이제 Silverlight 에서 준비할 내용은 모두 끝났다. Javascript에서 Silverlight 메소드를 호출할 코드를 작성하면 된다.
간단한 Javascript 함수를 만들면
function gogo() { //Object 태그의 ID var object = document.getElementById("silver"); if (object) { //실버라이트 메소드 호출 object.content.scriptKey.alert("hihi"); } } |
객체.content.scriptKey.alert("hihi");
scriptKey 는 2단계에서 말한 scriptKey의 Key에 해당하며
alert("hihi") 는 Silverlight에서 호출될 메서드 명이다.
4단계 : 3단계에서 작성한 gogo() 함수를 호출하면 Silverlight의 alert() 메소드가 호출된다.
ps. Silverlight 에서 메소드를 호출 하고 작업을 실행 후 문자열, 숫자 등을 return 받는 것도 가능 하다.
두 번째 Silverligt 에서 Javascript의 호출은 2단계를 거쳐서 구현 할 수 있다.
1단계 : Javascript에서 실행 할 함수를 하나 만든다
예제 소스 : 매개 변수 받아서 경고창 띄워준다.
function gogogo1(val) { alert(val); } |
2단계 : System.Windows.Browser namespace의 ScriptObject Class 를 이용하여 가능할 수 있다.
ScriptObject Class 를 생성을 하는데 생성 하는 방법은
ScriptObject script = HtmlPage.Window.GetProperty("gogogo") as ScriptObject;
script.InvokeSelf("hihi");
System.Windows.Browser namespace의 HtmlPage.Window.GetProperty메소드를 사용 한다.
매개변수로 들어 가는 건 Javascript에서 정의한 함수명 이다.
GetProperty는 Object 를 반환 해주기 때문에 캐스팅을 해주어야 한다.
InvokeSelf 매소드는 실제로 함수 호출 부분이다.
매개변수는 params Object[] 이기 때문에 Javascript 에서 정의한 함수대로 매개변수를 넣어주면 된다.
그러면 Javscript 함수가 호출되는 것이다.
ps. 마찬가지로 기본형식은 return 받을 수 있다.
아래는 예제 소스이다.
버튼을 클릭 했을 경우 Javascript 함수를 호출하는 간단 소스
예제소스
void button1_Click(object sender, RoutedEventArgs e) { //ScriptObject 객체에 gogogo 함수 등록 ScriptObject script = HtmlPage.Window.GetProperty("gogogo") as ScriptObject; //실제 함수 호출 script.InvokeSelf("hihi"); } |