Tech/Silverlight2009.03.16 19:52
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 어플리케이션 이벤트 연결




신고

'Tech > Silverlight' 카테고리의 다른 글

Silverlight with WEB  (0) 2009.03.30
Loading Dynamic XAPs and Assemblies  (0) 2009.03.19
USING STARTUP PARAMETERS WITH SILVERLIGHT  (0) 2009.03.18
HTML BROWSER INTEGRATION  (0) 2009.03.16
Isolated Storage in Silverlight 2  (0) 2009.03.16
Posted by [김수현] pixie
Tech/Silverlight2009.03.16 17:48
참고 자료 

1. What is Isolated Storage?
2. Isolated Storage를 사용하여 Data 저장 / 불러오기
3. Isolated Storage를 사용하여 File 저장 / 불러오기
4. Isolated Storage 저장 공간 늘리기
5. Data와 File은 어디에 있을까?
6. IsolatedSettings.ApplicationSetting vs IsolatedSettings.SiteSettings


1. What is Isolated Storage?

응용 프로그램이 부분 신뢰 응용 프로그램에 대해 안전한 클라이언트측 가상 파일 시스템을 만들고 유지 관리하도록 할 수 있습니다. Silverlight에서 모든 I/O 작업은 격리된 저장소로 제한되며 운영 체제의 파일 시스템을 사용하지 않습니다. (Cache와 비슷한 개념이다. 단 Isolated Storage는 File Writing이 가능하다.)


2. Isolated Storage를 사용하여 Data 저장 / 불러오기


private IsolatedStorageSettings appSetting = IsolatedStorageSettings.ApplicationSettings;

private void Save()
{
if (!appSetting.Contains("UserName"))
{
appSetting.Add("UserName", string.Empty);
}

appSetting["UserName"] = "myiris12";
}

private void load()
{
if (appSetting.Contains("UserName"))
{
string userName = appSetting["UserName"].ToString();
}
}


3. Isolated Storage를 사용하여 File 저장 / 불러오기


private void write(object sender, RoutedEventArgs e)
{
IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();

StreamWriter sw = new StreamWriter(store.OpenFile("foo.txt", FileMode.Create));
sw.WriteLine(UserName.Text);
sw.Close();
}

private void read(object sender, RoutedEventArgs e)
{
IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();

StreamReader sr = new StreamReader(store.OpenFile("foo.txt", FileMode.Open));
string userName = sr.ReadToEnd();
sr.Close();
}


4. Isolated Storage 저장 공간 늘리기

- 새로 할당될 용량은 기존 확보한 용량보다 커야 함 (작거나 같으면 Exception이 발생한다)
- IsolatedStorageFile을 이용하여 현재 사용 가능한 용량과 전체 용량을 알 수 있다.

IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();
현재 사용 가능한 용량_ store.AvailableFreeSpace
전체 용량 _ store.Quota

IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();
store.IncreaseQuotaTo(10 * 1024 * 1024); // byte 단위로 용량을 산정한다.

- IncreaseQuotaTo 함수를 실행하면 다음과 같은 화면을 통해 용량을 늘릴 수 있다.


- 사용한 저장 공간과 전체 저장 공간은 Silverlight Application에서 오른쪽 클릭을 하여 나타나는 메뉴에서 확인할 수 있다.



5. Data와 File은 어디에 있을까?

6. IsolatedSettings.ApplicationSetting vs IsolatedSettings.SiteSettings

a. ApplicationSettings _ 응용 프로그램별, 컴퓨터별 및 사용자 설정별로 저장되며, 그 범위는 응용 프로그램 .xap 파일의 전체 경로를 통해 확인됩니다. 
b. SiteSettings _ 도메인별, 컴퓨터별 및 사용자 설정별로 저장되며, 그 범위는 응용 프로그램 .xap 파일을 호스팅하는 하위 도메인을 통해 확인됩니다.

예를 들어 http://domain/site1/application.xap의 응용 프로그램은 http://domain/site2/application.xap의 응용 프로그램과 다른 ApplicationSettings를 갖지만 두 응용 프로그램은 모두 동일한 하위 도메인에서 호스팅되므로 동일한SiteSettings를 공유합니다.

저작자 표시 비영리 변경 금지
신고

'Tech > Silverlight' 카테고리의 다른 글

Silverlight with WEB  (0) 2009.03.30
Loading Dynamic XAPs and Assemblies  (0) 2009.03.19
USING STARTUP PARAMETERS WITH SILVERLIGHT  (0) 2009.03.18
HTML BROWSER INTEGRATION  (0) 2009.03.16
Isolated Storage in Silverlight 2  (0) 2009.03.16
Posted by 자이닉스 일이