接了個單子,非要用Silverlight 5來作一個項目,之前從來沒接觸過這東西,為了工作,硬著頭皮也要上了。摸索了一晚上,大至整理出一些項目中需要的東西,以下作為初探記錄:
Silverlight 5與Javascript的交談方式
Silverlight 5屬於客戶端的東西,客戶端的東西與服務器端交流,第一時間想到了基於javascript的ajax這個萬能膠,所以先從Silverlight 5與Javascript交互方式入手。
一、Silverlight 5發言,Javascript傾聽
從Silverlight 5裡向Javascript發送程序運行請求。
Silverlight 5端代碼具體如下:
HtmlPage.Window.Invoke("Javascript函數方式", "傳值-Oyiboy");
通過以上代碼可以直接在Silverlight 5裡運行Javascript的腳本代碼,並發送必要的數據出來。
二、Javascript發言,Silverlight 5傾聽
Javascript使用ajax獲取服務器端數據後發送給Silverlight 5,以達到Silverlight 5與服務器端的交互效果。
Silverlight 5端代碼具體如下:
//設置值
[ScriptableMember()]//這行是關鍵,必須有這個javascript才能請求到這個方法
public void setVal(string D)
{
this.textView.Text = D;
}
//javascript主動要求返回值
[ScriptableMember()]
public string returnVal()
{
return this.textView.Text;
}
Html代碼調整:
需要在Silverlight 5插件的object代碼內裡添加以下參數設置句,以達到插件在加載後獲取siliverlight對象。
<param name="onLoad" value="siliverLoaded" />
Javascript代碼具體如下:
//siliverlight對象
var siliverlightObj = null;
//上面那個HTML代碼內設置的Silverlight 5 onLoad事件觸發的函數
function siliverLoaded(sender, args) {
siliverlightObj = sender.getHost();
}
//以下代碼中的.buttonSet和.buttonReu是兩個帶這些class的按鈕,按鈕就不詳細寫出來了
//這個是運行Silverlight 5內的setVal方法
$(".buttonSet").click(function () {
siliverlightObj.Content.Main.setVal("javascript傳入值-Oyiboy");
})
//這個是運行Silverlight 5內的returnVal方法
$(".buttonReu").click(function () {
alert(siliverlightObj.Content.Main.returnVal());
});
以上幾個方式,靈活使用的活基本上就完全解決了Silverlight 5與服務器端之間的交流,好吧,雖然這篇的東西的主題是Silverlight 5與Javascript,但最終目的還是Silverlight 5與服務器端的交互,反正ajax也不是什麼新物,所以就跳過了。
感想:通過Silverlight 5的對象siliverlightObj.Content.Main這一大竄東西來看,siliverlightObj還能作更多的事了,具體還要慢慢摸索了,如果以後有需要用到的話,還可能會出這個的說明文章吧,或許。
補漏:
關於siliverlightObj.Content.Main中的Main是指在Silverlight 中app.xaml的Application_Startup事件中注冊的訪問名稱,具體代碼如下:
private void Application_Startup(object sender, StartupEventArgs e)
{
this.RootVisual = new MainPage();
System.Windows.Browser.HtmlPage.RegisterScriptableObject("Main", this.RootVisual);
}
從代碼中可知,如果有多個xaml頁的話,只要在這裡注冊不同的名稱就可以引用不同xaml頁內聲明的Javascript方法了。
剛剛整理代碼時在APP.xaml發現這句代碼才想起把這個給漏了,今天補回。