JavaScript에서 관리 코드 호출

XAML 코드에 클라이언트 스크립트를 바인딩하려면

파일 위쪽에서 using 또는 Imports 문을 추가하여 System.Windows.Browser 네임스페이스를 가져옵니다.

// HtmlDocument requires using System.Windows.Browser;
HtmlDocument doc = HtmlPage.Document;
//Enable the HTML textbox on the page and say hello
doc.GetElementById("Text1").SetProperty("disabled", false);
doc.GetElementById("Text1").SetAttribute("value",   "This text set from managed code.");

(실버라이트에서 자바스크립트 호출)

aspx 페이지의 자바스크립트

<script>
    function TestBtn2(str) {
        slCtl.Content.mySLapp.Name = str;
    }
    function TestBtn() {

        alert(slCtl.Content.mySLapp.Name);
    }
</script>

실버라이트 cs 페이지

HtmlPage.Window.Invoke("Test", "");

또다른 방법

HtmlElement script = HtmlPage.Document.CreateElement("script");
script.SetAttribute("type", "text/javascript");
script.SetProperty("text", "alert('A')");
HtmlPage.Document.DocumentElement.AppendChild(script);

관리 코드에 대한 클라이언트 스크립트 액세스 테스트


image

실버라이트 페이지에 외부페이지와 스크립트 호출을 할수 있는 클래스를 만듭니다

using System.Windows.Browser;

namespace SilverlightApplicationCardTest
{
    public class MyScriptableManagedType
    {
        [ScriptableMember()]
        public string MyToUpper(string str) {
            return str.ToUpper();
        }

        [ScriptableMember()]
        public string Name { get; set; }
    }

}

 

 

App.xaml

페이지에서 외부에서 호출할 이름을 등록해줍니다

private void Application_Startup(object sender, StartupEventArgs e)
{
    this.RootVisual = new Page();

    //Set up some scriptable managed types for access from Javascript.
    MyScriptableManagedType smt = new MyScriptableManagedType();
    HtmlPage.RegisterScriptableObject("mySLapp", smt);

}

 

 

실버라이트가 포함된 페이지에서 처리부분

<script type="text/javascript" src="Silverlight.js"></script>
   <script type="text/javascript">
       var slCtl = null;

       function embedSilverlight(parentElement, pluginId, userContext) {
           var altHtml = pluginId == "sl1" ? null : "<!--not installed-->";
           return Silverlight.createObject("ClientBin/SilverlightApplicationCard.xap",
               parentElement, pluginId,
               {
                   width: "540", height: "340",
                   background: "white", alt: altHtml,
                   minRuntimeVersion: "2.0.30908.0", autoUpgrade: true
               },
               { onError: onSLError, onLoad: onSLLoad },
               "param1=value1,param2=value2", userContext);
       }

       function onSLLoad(plugIn, userContext, sender) {
           slCtl = sender.getHost();  //HTML 버젼

//// ASPX version
///slCtl = sender.get_element();


           alert(slCtl.Content.mySLapp.MyToUpper("Test String"));  //실제로 잘 불러와지는지 테스트

           window.status += plugIn.id + " loaded into " + userContext + ". ";
       }

       function onSLError(sender, args) {
           // Display error message.
       }
   </script>

 

</head>
<body style="height:100%;margin:0;">
    <form id="form1" runat="server" style="height:100%;">
        <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
        <div  id="sl2Host">
             <script type="text/javascript">
                 embedSilverlight(sl2Host, "sl2", "row2"); //실버라이트 바인딩
                </script>
        </div>

<input type="button"  onclick="TestBtn()" value="실버라이트 값 자겨오기" />
<input type="button"  onclick="TestBtn2('kojaedoo')" value="실버라이트 값 세팅하기" />


    </form>
</body>
</html>

+ Recent posts