╤Ω≡Φ∩δσ≥ - ²≥ε φεΓα ≥σ⌡φεδεπΦ ∩ετΓεδ ■∙α ±ετΣαΓα≥ⁿ COM Ωε∞∩εφσφ≥√ ±≡σΣ±≥Γα∞Φ ∩≡ε±≥√⌡ Γ Φ±∩εδⁿτεΓαφΦ τ√ΩεΓ ±÷σφα≡ΦσΓ, Σδ ²≥επε ∩εΣ⌡εΣΦ≥ δ■ßεΘ τ√Ω ±÷σφα≡ΦσΓ ∩εΣΣσ≡µΦΓα■∙ΦΘ MS ActiveX Scripting Φφ≥σ≡⌠σΘ±. ╤Ω≡Φ∩δσ≥ ∩ε ΓΦδ± Γ 1997 πεΣ≤ ± Γ√⌡εΣε∞ Γ ±Γσ≥ Internet Explorer 4.0 Φ Φτφα≈αδⁿφε ß√δ ε≡Φσφ≥Φ≡εΓαφ φα ±ετΣαφΦσ UI (user-interface) Ωε∞∩εφσφ≥ ∞φεπεΩ≡α≥φεπε Φ±∩εδⁿτεΓαφΦ Σδ Web ±≥≡αφΦ÷. ┬±σ ≈≥ε φσεß⌡εΣΦ∞ε ß√δε τφα≥ⁿ Σδ ±ετΣαφΦ ±Ω≡Φ∩δσ≥α - ²≥ε DHTML Φ ΩαΩεΘ-φΦß≤Σⁿ τ√Ω ±÷σφα≡ΦσΓ (JScript, VBScript). ╥. Ω. ²≥ε≥ ±Ω≡Φ∩δσ≥ ßατΦ≡εΓαδ± φα DHTML Φ Φ±∩εδⁿτεΓαδ± Γ HTML ΣεΩ≤∞σφ≥α⌡, ≥ε εφ ∩εδ≤≈Φδ φατΓαφΦσ DHTML ±Ω≡Φ∩δσ≥.
DHTML ±Ω≡Φ∩δσ≥ εßδαΣασ≥ ßεπα≥√∞Φ Γετ∞εµφε±≥ ∞Φ Σδ ±ετΣαφΦ Ωε∞∩εφσφ≥ ∩εδⁿτεΓα≥σδⁿ±Ωεπε Φφ≥σ≡⌠σΘ±α, φε φσ εßσ±∩σ≈ΦΓασ≥ ∞φεπε÷σδσΓεπε φατφα≈σφΦ Ωε∞∩εφσφ≥φεΘ α≡⌡Φ≥σΩ≥≤≡√ Γφσ ß≡α≤τσ≡α. ─δ ±φ ≥Φ ²≥επε επ≡αφΦ≈σφΦ ß√δ ≡ατ≡αßε≥αφ ±σ≡Γσ≡φ√Θ ±Ω≡Φ∩δσ≥, Σαδσσ Φ∞σφ≤σ∞√Θ ∩≡ε±≥ε ±Ω≡Φ∩δσ≥ε∞.
┬ ≡στ≤δⁿ≥α≥σ ∞√ Φ∞σσ∞ ΣΓα Γα≡Φαφ≥α:
╤Ω≡Φ∩δσ≥ Γδ σ≥± COM Ωε∞∩εφσφ≥εΘ ≡σαδΦτεΓαφφεΘ φα XML (eXtensible Markup Language) Φ τ√Ωσ ±÷σφα≡ΦσΓ. XML Φ±∩εδⁿτ≤σ≥± Σδ ∩ε±≥≡εσφΦ ±≥≡≤Ω≥≤≡√ ±Ω≡Φ∩δσ≥α (ε∩≡σΣσδσφΦ ≥Φ∩α COM Ωε∞∩εφσφ≥√, σσ ∞σ≥εΣεΓ, ±ΓεΘ±≥Γ, ΦφΦ÷ΦΦ≡≤σ∞√⌡ ±εß√≥ΦΘ, Φ ≥. Σ.), α ΩεΣ φα τ√Ωσ ±÷σφα≡ΦσΓ εßσ±∩σ≈ΦΓασ≥ ⌠≤φΩ÷Φεφαδⁿφε±≥ⁿ.
╫≥ε Ωα±ασ≥± ±Ω≡Φ∩δσ≥εΓ, ≥ε ²≥ε ∩εδφε÷σφφ√σ COM Ωε∞∩εφσφ≥√ Φ ∞επ≤≥ Φ±∩εδⁿτεΓα≥ⁿ± Σδ ≡σ°σφΦ °Φ≡εΩεπε Ωδα±±α ταΣα≈, ΩαΩ ≥ε:
╤Ω≡Φ∩δσ≥ ≥σ⌡φεδεπΦ ±ε±≥εΦ≥ Φτ:
╤α∞√σ ≈α±≥ε Φ±∩εδⁿτ≤σ∞√σ interface handler ΓΩδ■≈α COM Automation, Event Φ, DHTML Behavior interface handler ≤µσ Γ±≥≡εσφ√ Γ ±Ω≡Φ∩δσ≥ run-time.
┬± ±δεµφε±≥ⁿ ±ετΣαφΦ COM Ωε∞∩εφσφ≥, ΓΩδ■≈α ≡σαδΦτα÷Φ■ ≥αΩΦ⌡ ±≥αφΣα≡≥φ√⌡ COM Φφ≥σ≡⌠σΘ±εΓ ΩαΩ IUnknown, Γ±≥≡εσφα Γ interface handler. ╤Ω≡Φ∩δσ≥ ±εΣσ≡µΦ≥ ≥εδⁿΩε ΩεΣ, εßσ±∩σ≈ΦΓα■∙ΦΘ ⌠≤φΩ÷Φεφαδⁿφε±≥ⁿ COM Ωε∞∩εφσφ≥√, Φ Γ ±ε≈σ≥αφΦΦ ± ≥σ∞, ≈≥ε ²≥ε≥ ΩεΣ ≡σαδΦτ≤σ≥± φα ∩≡ε±≥ε∞ Γ Φτ≤≈σφΦΦ τ√Ωσ ±÷σφα≡ΦσΓ, ±Ω≡Φ∩δσ≥ - ≥σ⌡φεδεπΦ Γδ σ≥± ±α∞√∞ ∩≡ε±≥√∞ Φ ∩≡ετ≡α≈φ√∞ ±∩ε±εßε∞ ±ετΣαφΦ COM Ωε∞∩εφσφ≥. ┬√ τφασ≥σ, ≈≥ε Ωε∞∩εφσφ≥α Σεδµφα Σσδα≥ⁿ û Γ√ ±ετΣασ≥σ ±εε≥Γσ≥±≥Γ≤■∙ΦΘ ±Ω≡Φ∩≥, ε±≥αδⁿφεσ ταßε≥α run-time εΩ≡≤µσφΦ . ╧ε±δσ ±ετΣαφΦ ±Ω≡Φ∩δσ≥α Γ√ ∞εµσ≥σ Φ±∩εδⁿτεΓα≥ⁿ σπε ΩαΩ ∩εδφε÷σφφ≤■ COM Ωε∞∩εφσφ≥≤.
╘αΘδ ε∩Φ±√Γα■∙ΦΘ ±Ω≡Φ∩δσ≥(*.sct) - ²≥ε XML ⌠αΘδ, ε≈σφⁿ ∩ε⌡εµΦΘ φα HTML, φε ±εΣσ≡µα∙ΦΘ ±∩σ÷Φ⌠Φ≈σ±ΩΦσ ≥απΦ ε∩≡σΣσδ ■∙Φσ ±Ω≡Φ∩δσ≥ Φ σπε ∩εΓσΣσφΦσ.
╬±≥αφεΓΦ∞± ∩ε∩εΣ≡εßφσσ φα ±ετΣαφΦΦ ±Ω≡Φ∩δσ≥α. ╤Ω≡Φ∩δσ≥ ±εΣσ≡µΦ≥ ±δσΣ≤■∙Φσ ²δσ∞σφ≥√:
╩α≡Ωα± ±Ω≡Φ∩δσ≥α ∩≡σΣ±≥αΓδ σ≥ Φτ ±σß φσ≈≥ε ∩εΣεßφεσ:
<?scriptlet validate="true" error="true" debug="true"?> <scriptlet> <registration progid="progid" description="description" version="version" clsid="{classid}"> <implements type=COMhandlerName id=internalName> <property name="name"/> <method name="name"/> </implements> <script language="VBScript"> Function method() 'script here End Function </script> <script language="JavaScript"> function method() { // script here } </script> </scriptlet>
╚φεπΣα φσεß⌡εΣΦ∞ε ≈≥εß√ ±Ω≡Φ∩δσ≥ ß√δ τα≡σπΦ±≥≡Φ≡εΓαφ. ─δ ≡σπΦ±≥≡α÷ΦΦ ±Ω≡Φ∩δσ≥α ∞εµφε Γε±∩εδⁿτεΓα≥ⁿ± ∩≡επ≡α∞∞εΘ Regsvr32.exe ΦδΦ Γ√ß≡αΓ ∩≤φΩ≥ Register ∩ε ∩≡αΓε∞≤ φαµα≥Φ■ Ωφε∩ΩΦ ∞√°Φ φα ⌠αΘδσ *.sct.
─δ ≥επε ≈≥εß√ εßδσπ≈Φ≥ⁿ ∩≡ΦδεµσφΦ■, Φ±∩εδⁿτ≤■∙σ∞≤ ±Ω≡Φ∩δσ≥√ Γετ∞εµφε±≥ⁿ ≤τφα≥ⁿ Φφ≥σ≡⌠σΘ± ±Ω≡Φ∩δσ≥α, Φ∞σσ≥± Γετ∞εµφε±≥ⁿ ±ετΣα≥ⁿ ßΦßδΦε≥σΩ≤ ≥Φ∩εΓ. ┴ΦßδΦε≥σΩα ≥Φ∩εΓ ±εΣσ≡µΦ≥ Φφ⌠ε≡∞α÷Φ■ ε ∞σ≥εΣα⌡, ±ΓεΘ±≥Γα⌡ Φ ΦφΦ÷ΦΦ≡≤σ∞√⌡ ±εß√≥Φ ⌡ ±Ω≡Φ∩δσ≥α, α ≥αΩµσ ΩεδΦ≈σ±≥Γσ ∩α≡α∞σ≥≡εΓ φσεß⌡εΣΦ∞√⌡ Σδ Γ√τεΓα ∞σ≥εΣεΓ. ─δ ±ετΣαφΦ ßΦßδΦε≥σΩΦ ≥Φ∩εΓ φσεß⌡εΣΦ∞ε Γ√ß≡α≥ⁿ ∩≤φΩ≥ Generate Type Library Γ ∞σφ■ ∩ε ∩≡αΓε∞≤ φαµα≥Φ■ Ωφε∩ΩΦ ∞√°Φ. ┴ΦßδΦε≥σΩα ≥Φ∩εΓ (*.tlb) ±ετΣασ≥± Γ ≥εΘ µσ ∩α∩Ωσ ± Φ∞σφσ∞ ±Ω≡Φ∩δσ≥α Φ ≡σπΦ±≥≡Φ≡≤σ≥± Γ ≡σσ±≥≡σ Windows.
╧ε ≤∞εδ≈αφΦ■ ∩≡Φ Γ√∩εδφσφΦΦ ±Ω≡Φ∩δσ≥α φσ Γ√Σασ≥± φΦΩαΩΦ⌡ ±εεß∙σφΦΘ εß ε°ΦßΩα⌡. ═ε ∞εµφε ΓΩδ■≈Φ≥ⁿ ≡σµΦ∞, ∩≡Φ Ωε≥ε≡ε∞ ε≥±δσµΦΓα■≥± ±Φφ≥αΩ±Φ≈σ±ΩΦσ ε°ΦßΩΦ, ∩≡εΓσ≡ σ≥± Ωε≡≡σΩ≥φε±≥ⁿ Φ±∩εδⁿτεΓαφΦ XML Φ ∩ε Γδ σ≥± Γετ∞εµφε±≥ⁿ ε≥δαΣΩΦ ±Ω≡Φ∩δσ≥α ±≡σΣ±≥Γα∞Φ script debugger. ─δ ²≥επε Γ ²δσ∞σφ≥σ <?scriptlet?> - ∩≡σΣ≤±∞ε≥≡σφ√ ±δσΣ≤■∙Φσ ε∩÷ΦΦ:
┼±δΦ ²δσ∞σφ≥ <?scriptlet?> φσ ΓΩδ■≈σφ Γ ⌠αΘδ, ≥ε Γ±σ ε∩÷ΦΦ ≤±≥αφαΓδΦΓα■≥± Γ false.
╧ε ≤∞εδ≈αφΦ■ ±Ω≡Φ∩δσ≥ φσ Γ√τ√Γασ≥ ±εß√≥ΦΘ, Ωε≥ε≡√σ ∞επ≤≥ ß√≥ⁿ εß≡αßε≥αφ√ Γ Ωεφ≥σΘφσ≡σ. ╬ΣφαΩε, ≡σαδΦτ≤ Event interface handler ∞εµφε ΣεßαΓδ ≥ⁿ ±εß√≥Φ Γ ±Ω≡Φ∩δσ≥. ╧ε±δσ ²≥επε ∩ε Γδ σ≥± Γετ∞εµφε±≥ⁿ ΦφΦ÷ΦΦ≡εΓα≥ⁿ ±εß√≥Φ Φτ ±Ω≡Φ∩δσ≥α Γ δ■ßεσ Γ≡σ∞ . ─δ ≥επε ≈≥εß√ ΣεßαΓΦ≥ⁿ ±εß√≥Φσ φσεß⌡εΣΦ∞ε:
<implements type="Event" id="scriptlet1"> <event name="event1"/> <event name="event2"/> </implements>
┬ COM ∩≡επ≡α∞∞Φ≡εΓαφΦΦ ≤ΓσΣε∞δσφΦσ ε ±εß√≥Φ ⌡ ∩≡εΦ±⌡εΣΦ≥ ≈σ≡στ dispatch ΦΣσφ≥Φ⌠ΦΩα≥ε≡ (dispid) - ÷σδεσ ≈Φ±δε, ε∩≡σΣσδ ■∙σσ ±εß√≥Φσ ΦφΦ÷ΦΦ≡≤σ∞εσ Ωε∞∩εφσφ≥εΘ. Dispid Ωε∞∩ΦδΦ≡≤σ≥± Γ ßΦßδΦε≥σΩ≤ ≥Φ∩εΓ Φ τα≥σ∞ Φ±∩εδⁿτ≤σ≥± ∩≡ΦδεµσφΦσ∞ Σδ ±Γ τΦ ± ±εß√≥Φσ∞. ┬ ∩≡ε÷σ±±σ ±ετΣαφΦ ßΦßδΦε≥σΩΦ ≥Φ∩εΓ dispid ±ετΣασ≥± αΓ≥ε∞α≥Φ≈σ±ΩΦ, φε Γ√ ∞εµσ≥σ ε∩≡σΣσδΦ≥ⁿ σπε ±α∞Φ:
<event name="event1" dispid=22 />.
╧ε±δσ ε∩≡σΣσδσφΦ ±εß√≥Φ ∞εµφε σπε Γ√τ√Γα≥ⁿ ± ∩ε∞ε∙ⁿ■ ∞σ≥εΣα fireEvent(), φα∩≡Φ∞σ≡:
scriplet1.fireEvent("event2");
┬ Ωα≈σ±≥Γσ ∩≡Φ∞σ≡α ±ετΣαΣΦ∞ ±Ω≡Φ∩δσ≥ "Employee", ⌡≡αφ ∙ΦΘ ID ±ε≥≡≤ΣφΦΩα, σπε τα≡αßε≥φ≤■ ∩δα≥≤, Φ∞σ■∙ΦΘ ∞σ≥εΣ ∩εΓ√°σφΦ τα≡∩δα≥√ Φ ≡σαδΦτ≤■∙Φ∞ εΣφε ±εß√≥Φσ. ╬∩≡σΣσδΦ∞ read-only ∩εδσ "Salary", read-write ∩εδσ "EmpID", ∞σ≥εΣ "RaiseSalary" ∩εΓ√°α■∙ΦΘ τα≡∩δα≥≤ Φ ±εß√≥Φσ "Enough", ΩεπΣα τα≡∩δα≥α ∩≡σΓ√°ασ≥ ΩαΩεΘ-≥ε ∩ε≡επ J. ┬ φα°σ∞ ±δ≤≈ασ ±Ω≡Φ∩δσ≥ Γδ σ≥± COM Automation Ωε∞∩εφσφ≥εΘ. ╥αΩ ΩαΩ Γ ±ΓεΘ±≥Γσ "Salary" ≡σαδΦτεΓαφ ≥εδⁿΩε ∞σ≥εΣ get_, ≥ε ±ΓεΘ±≥Γε Σε±≥≤∩φε ≥εδⁿΩε Σδ ≈≥σφΦ .
<scriptlet> <Registration ProgID="Employee.Scriptlet"/> <implements id=Automation type=Automation> <property name=Salary> <get/> </property> <property name=EmployeeNumber internalname=EmpID> <get/> <put/> </property> <method name=RaiseSalary> <PARAMETER name=Percentage/> </method> </implements> <implements type="Event" id="scriptlet1"> <event name="Enough"/> </implements> <script language=JScript> var Salary var EmpID Salary = 10000 function get_EmpID() { return EmpID; } function put_EmpID(newValue) { EmpID = newValue; } function get_Salary() { return Salary; } function RaiseSalary(Percentage) { increase = Salary * (Percentage/100); Salary = Salary + increase; If Salaty > 25000 scriplet1.fireEvent("Enough"); } </script> </scriptlet>