Silverlight雖然是以插件形式來顯示的,但是它和JS以及HTML的互動還是很友善的,下面一一道來
Silverlight得到浏覽器的資訊:
Name,得到浏覽器名稱
BrowserVersion得到浏覽器版本
Platform,得到運作平台資訊
CookiesEnabled,得到一個值辨別是否啟用Cookie
UserAgent得到目前代理資訊
打開一個視窗,效果等同于window.open:
HtmlPage.PopupWindow,打開一個視窗,可以指定HtmlPopupWindowOptions參數,
<a href="http://www.cnblogs.com/ListenFly/archive/2011/12/07/2269532.html"></a>
HtmlPopupWindowOptions 可以指定頁面的屬性,高度、寬度位址欄之類的屬性,其實PopupWindow的原理就是調用了js的Window.Open方法.
切記,PopopWindow隻能在事件(觸發)中起作用,也就意味着不能一開始就顯示,另外其中的Url必須是絕對路徑。
HtmlDocument,表示一個完整的 Html的 Document對象,可以使用HtmlPage.Document得到
主要屬性:
DocumentUri:得到目前頁面的URL位址
QueryString:得到傳遞的參數
DocumentElement:得到HtmlDocument對象
Body:得到Body節點(HtmlElement類型)
Cookies:Cookie的支援,很有用
CreateElement():建立一個HtmlElement節點(一個Html的标簽元素)
AttachEvent():給Html元素附加腳本事件
DetachEvent():删除腳本事件
Submit():送出頁面,如果Silverlight在aspx頁面很有用,可以執行伺服器代碼
操作HtmlElement:
AppendChild():追加HtmlElement對象
RemoveChild():移除HtmlElement
Focus():使HtmlElement元素獲得焦點
GetAttribute(),
SetAttribute(), and
RemoveAttribute(): 得到或者設定或移除HtmlElement的屬性(本身Html DOM 存在的,不是自己指定的)
GetStyleAttribute(),
SetStyleAttribute(),
RemoveStyleAttribute():得到或者設定或移除HtmlElement的樣式屬性
GetProperty() and
SetProperty():得到或者設定HtmlElement的屬性(自己添加的或者是作為了HtmlElement的一部分的屬性比如 innerHTML)
AttachEvent() and
DetachEvent():附加和移除JS腳本事件
HTML DOM 的事件:
onchange 值改變的時候觸發
onclick 單擊事件
onmouseover 滑鼠懸浮事件
onmouseout 滑鼠離開事件
onkeydown 鍵盤按下事件
onkeyup 鍵盤放開事件
onselect 當Select被選擇時候
onfocus 獲得焦點
onblur 失去焦點
onabort 使用者去掉圖檔下載下傳
onerror 發生錯誤時候
onload 頁面加載事件
onunload 頁面關閉(或者通過超鍊跳轉,新頁面顯示之前執行)
在Silverlight調用JS方法的:
第一種調用方法:
現有JS函數如下:
使用ScriptObject對象實作調用,通過HtmlPage.Window.GetProperty("changeParagraph")得到Object對象,其中的參數就是JS方法的名稱
然後使用ScriptObject調用InvokeSelf方法,參數就是JS方法的參數(如果有參數就傳遞,否則就不傳遞)
第二種方法:
這個JS方法使用了對象的方式,并且還賦予了屬性為一個Function
可以看到擷取ScriptObject的方式變化了,因為這個JS使用了對象的方式在使用,同時他的屬性prototype有一個Display的屬性(一個Function),
然後使用ScriptObject對象的Invoke方法參數為prototype的屬性名稱。
在JS中通路Silverlight中的函數:
①腳本化的類必須是 public 的
②需要腳本化的屬性、方法、事件要标記為 [ScriptableMember]
③如果類(XAML頁面)被标記為 [ScriptableType],則意味着其屬性、方法、事件都是可被通路的
④使用HtmlPage.RegisterScriptableObject()或者HtmlPage.RegisterCreateableType()進行注冊,
前者注冊一個對象,後者注冊一個類型
⑤給我們的obejct标簽添加一個唯一的ID(在JS中通過這個插件來通路Silverlight注冊的函數)
看看類的代碼實作:
然後在一個XAML中進行注冊:
在JS中通路:
注冊一個XAML頁面:
JS中的調用
和剛才的方式一摸一樣
上邊的例子是使用 HtmlPage.RegisterScriptableObject的方式注冊一個對象,接下來使用HtmlPage.RegisterCreateableType注冊一個類型:
看看類的代碼,一個簡單的類和簡單的方法:
在XAML中進行注冊:
第一個參數隻是對象的名字稱号,第二個就是類型
在JS中通路這個類中的這個GetRandomNumberInRange方法:
看到和上邊的差別了吧,沒錯上邊是“document.getElementById("xaml1").content.scriptable;”而這裡是使用content.services.createObject()方法,
參數就是在XAML中使用“HtmlPage.RegisterCreateableType”注冊的第一個參數,得到一個注冊的對象,然後使用對象通路GetRandomNumberInRange
方法,如果有參數則傳遞。
HTML和Silverlight互動的安全性,下邊這兩個配置可以保護:
<param name="enableHtmlAccess" value="false" />設定為false之後則無法使用Document, Window, Plugin, BrowserInformation ,但是可以使用HtmlPage.PopupWindow();
<param name="allowHtmlPopupwindow" value="false" />如果為false,則無法使用HtmlPage.PopupWindow();
好了,Silverlight和HTML的互動就到這裡吧,希望大家指出錯誤的地方。