HTML BROWSER INTEGRATION
1. Javascript에서 Silverlight 모듈내에 정의된 메소드 사용하기.
2. Silverlight에서 Javascript에서 정의된 메소드 호출하기.
3. Silverlight Event 연동.
1. Javascript에서 Silverlight 모듈내에 정의된 메소드 사용하기.
Silverlight에서 작성된 메소드를 JavaScript에서 액서스 가능하도록 설정.
//JavaScript에서 인식 가능한 Object로 등록.
HtmlPage.RegisterScriptableObject("slInternal", this);
//액서스 가능하도록 설정.
[ScriptableMember]
public string SayHelloToMe(string firstName)
{
Block1.Text = firstName;
return "성공";
}
JavaScript에서 Silverlight 메소드 호출.
var slObj = document.getElementById("Xaml1"); var ret = slObj.content.slInternal.SayHelloToMe("자이닉스");
2. Silverlight에서 Javascript에 정의된 메소드 호출하기
Javascirpt 함수 작성.
<script type="text/javascript">
function sayGoodbye(name)
{
alert( "name : " + name);
return "성공";
}
</script>
Silverlight에서 Javascript에 존재하는 함수 호출
string ret = (string) HtmlPage.Window.Invoke("sayGoodbye", "자이닉스");
또는
ScriptObject jsObj = (ScriptObject)HtmlPage.Window.GetProperty("sayGoodbye");
string ret = (string)jsObj.InvokeSelf(TextBox1.Text, 1000);
3. Silverlight Event 연동.
이벤트 정의
[ScriptableType] public class CompletedEventArgs : EventArgs
{
public CompletedEventArgs(string status, string result)
{
Status = status;
Result = result;
}
[ScriptableMember]
public string Status { get; set; }
public string Result { get; set; }
}
델리게이트를 ScriptableMember로 선언.
[ScriptableMember]
public event EventHandler<CompletedEventArgs> Completed;
private void OnCompleted(string status, string result)
{
if (Completed != null)
{
CompletedEventArgs args = new CompletedEventArgs ( status, result );
Completed(this, args);
}
}
버튼을 클릭했을 때, 이벤트 발생.
private void Button2_Click(object sender, RoutedEventArgs e) {
OnCompleted("OK", "자이닉스");
}
Javascript에서 Silverlight에서 발생되는 이벤트 연결.
function bind() {
var slObj = document.getElementById("Xaml1");
alert(slObj.content.slInternal);
slObj.content.slInternal.Completed = function(sender, a)
{
// sender는 Silverlight 객체이다. (slObj.content.slInternal)
alert(a.Result);
}
}
참고
HTML 페이지에서 Silverlight에 있는 이벤트를 연결할 때, HTML 페이지의 OnLoad 이벤트에서 처리하게 되면 Silverlight 어플리케이션이 생성되어 있지 않을 수도 있기 때문에 스크립트 오류를 발생시킬 수 있다. 이것을 정상적으로 처리하기 위해서는 Silverlight 어플리케이션의 로드가 끝난 시점에 HTML 페이지에 Silverlight 어플리케이션이 로드 되었다는 것을 알려주고, 그 때 HTML 페이지에서 Silverlight의 이벤트 연결 작업을 하면 된다.
Silverlight 로드 완료 -> HTML 페이지에 전달 -> HTML 페이지에서 Silverlight 어플리케이션 이벤트 연결