修改jQuery的Plug-in插件以相容於Silverlight 2.0。
有在網頁中使用 Silverlight 應用程式的人通常都會使用 JavaScript 和它溝通(使用 HTML Bridge),而在 jQuery 流行起來以後,網路上也有出現 jQuery 的 Silverlight 插件 (plug-in),我找到的是這個版本:http://malsup.com/jquery/ag/,原本開心的要使用它,結果卻出現:
You must include the Silverlight.js script.
可是在頁面中已經引用了 Silverlight.js 了 ... 沒道理不能用啊。
這個 jquery.silverlight.js 還算簡單,長度不長,所以我大概看了一下它的內容,和 Silverlight 2.0 附的 Silverlight.js 比對了一下,發現在插件中使用了:
1
if (!window.Sys || !window.Sys.Silverlight) {
2
alert('You must include the Silverlight.js script.');
3
return;
4
}

2

3

4

和 Silverlight.js 比對,Silverlight 2.0 中沒有 window.Sys 的宣告,所以它才不能使用。
因此,只要改一些 jquery.silverlight.js 中的兩個地方,就可以用在 Silverlight 2.0 啦(註解中標記 CHANGE FOR SILVERLIGHT 2.0 的部份,原本都有 "Sys.Silverlight",把 Sys 拿掉即可):
01
/**
02
* jQuery Plugin for use with Microsoft Silverlight
03
* Tested with Silverlight 1.0 beta
04
* @author: M. Alsup (malsup at gmail dot com)
05
* @version: 1.0 (5/04/2007)
06
* Documentation and examples at: http://www.malsup.com/jquery/ag/
07
* Free beer and free speech. Enjoy!
08
*/
09
(function($) {
10
11
// CHANGE FOR SILVERLIGHT 2.0
12
if (!window || !window.Silverlight) {
13
alert('You must include the Silverlight.js script.');
14
return;
15
}
16
17
$.fn.silverlight = function(opts) {
18
return this.each(function() {
19
var o = jQuery.extend({}, $.fn.silverlight.defaults, opts);
20
21
// try to use metadata plugin
22
if ($.meta) jQuery.extend(o, $(this).data());
23
24
// make sure activex object gets a unique id
25
var id = o.id || (this.id ? this.id + 'AG' : 'AG' + $.fn.silverlight.counter++);
26
var props = {
27
width: o.width,
28
height: o.height,
29
inplaceInstallPrompt: o.installPrompt,
30
background: o.bg,
31
isWindowless: o.windowless,
32
framerate: o.framerate,
33
version: o.version
34
};
35
var events = {
36
onError: o.error,
37
onLoad: o.load
38
};
39
40
// CHANGE FOR SILVERLIGHT 2.0
41
Silverlight.createObjectEx({
42
source: o.xaml,
43
parentElement: this,
44
id: id,
45
properties: props,
46
events: events,
47
initParams: o.params,
48
userContext: o.context
49
});
50
});
51
};
52
53
// @see http://msdn2.microsoft.com/en-us/library/bb190632.aspx
54
$.fn.silverlight.defaults = {
55
width: '300', // width of component in px
56
height: '300', // height of component in px
57
bg: '#00000000', // background color (default is transparent)
58
installPrompt: 'true', // display in-place install prompt?
59
windowless: 'true', // windowless mode (false for wrapping markup)
60
framerate: '24', // maximum framerate
61
version: '0.9', // Silverlight version
62
error: null, // onError callback
63
load: null, // onLoad callback
64
params: null, // object init params
65
context: null // callback arg passed to the load callback
66
};
67
68
$.fn.silverlight.counter = 0;
69
70
})(jQuery);

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

PS: 此程式著作權為 M. Alsup (malsup at gmail dot com) 所有,本文轉載僅供修改的說明之用,特此註明。