silverlight 和javascript 的交互

在使用Silverlight 的时候,也许你要使用本地资源,然而Silverlight 可能不能做到,但是如果我们透过js+activex 或者js +externl标签,可以做很多事情。

那么如何完成两者的交互呢:

1. silverlight 中使用javascript

(1) 引用名字空间: using System.Windows.Browser;

(2) 方法1:HtmlPage.Window.Eval() 这个方法直接执行字符串的javascript;

                <textarea cols="50" rows="15" name="code" class="c-sharp">string prompt = "alert(/""; prompt += ex.Message; prompt += " /");"; HtmlPage.Window.Eval(prompt); // 其中的ex为异常对象,我经常用来打印异常信息。</textarea>

    方法2:HtmlPage.Window.Invoke("InitializeFso", new object[] { });

               其中第一个参数是你的javascript 的函数名称,第二参数是调用这个函数的参数数组。

<textarea cols="50" rows="15" name="code" class="c-sharp">SearchPath.Text = strNode; string strPath = ""; try { strPath = HtmlPage.Window.Invoke("GetAllDirectory", new string[] { strNode }) as string; } catch (System.Exception ex) { HtmlPage.Window.Eval("alert(/"Get directory error!/")"); string prompt = "alert(/""; prompt += ex.Message; prompt += " /");"; HtmlPage.Window.Eval(prompt); }</textarea>

方法3:htmlpage.window.createInstance();

 

2. JS 调用Silverlight

   1. 在Silverlight的UserControl的派生类的构造函数中进行注册Silverlight给js 的运行期。

    <textarea cols="50" rows="15" name="code" class="c-sharp">try { HtmlPage.RegisterScriptableObject("Test", this); } catch (System.Exception ex) { HtmlPage.Window.Eval("alert(/"register Silverlight error!/")"); string prompt = "alert(/""; prompt += ex.Message; prompt += " /");"; HtmlPage.Window.Eval(prompt); }</textarea>

  2. 在Silverlight中建立可以让js 调用的方法:使用关键字[ScriptableMember], 还有[ScriptableType] 例如:

 <textarea cols="50" rows="15" name="code" class="c-sharp">[ScriptableMember] public void QueryResultstring(string strmessage) { QueryScanResult Result = new QueryScanResult(); Result.ParserFromString(strmessage); if (Result.ErrorCode != "0") { return; } string strShow = "scaning: "; if (Result.Section == "2") { ScanPathShower.Text = strShow + Result.TargetFile; } if (Result.Section == "4") { ScanPathShower.Text = strShow + "Finished!"; m_bScanButton = false; } // Section 0 undefine // section 1 ready // section 2 scaning // section 3 pause // section 4 completed // Query again }</textarea>

 3. 在测试silverlight 的页面增加 silverlight obj 的ID<textarea cols="50" rows="15" name="code" class="xhtml">&lt;object id ="SilverlightControlXXX" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"&gt; &lt;param name="source" value="DubaSilverlightDemo.xap"/&gt; &lt;param name="onerror" value="onSilverlightError" /&gt; &lt;param name="background" value="white" /&gt; &lt;param name="minRuntimeVersion" value="3.0.40307.0" /&gt; &lt;param name="autoUpgrade" value="true" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=141205" mce_href="http://go.microsoft.com/fwlink/?LinkID=141205" style="text-decoration: none;" mce_style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" mce_src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" mce_style="border-style: none"/&gt; &lt;/a&gt; &lt;/object&gt;</textarea>

 4. 在Js 中调用

<textarea cols="50" rows="15" name="code" class="c-sharp">var control = document.getElementById("SilverlightControlxxx"); //alert("OK"); try { alert("Call silverlight"); control.Content.Test.QueryVirusstring(KxRes); } catch(e) { alert("Exception"); } </textarea>

 

 

 

你可能感兴趣的:(silverlight 和javascript 的交互)