天天看點

Silverlight之Silverlight和HTML(DOM,JS)互動 (轉載)

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互動的安全性,下邊這兩個配置可以保護:

&lt;param name="enableHtmlAccess" value="false" /&gt;設定為false之後則無法使用Document, Window, Plugin, BrowserInformation ,但是可以使用HtmlPage.PopupWindow();

&lt;param name="allowHtmlPopupwindow" value="false" /&gt;如果為false,則無法使用HtmlPage.PopupWindow();

好了,Silverlight和HTML的互動就到這裡吧,希望大家指出錯誤的地方。

繼續閱讀