╬ßτε≡ ±Ω≡Φ∩δσ≥ û ≥σ⌡φεδεπΦΦ

┬ΓσΣσφΦσ

╤Ω≡Φ∩δσ≥ - ²≥ε φεΓα  ≥σ⌡φεδεπΦ  ∩ετΓεδ ■∙α  ±ετΣαΓα≥ⁿ 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>

 

Ω επδαΓδσφΦ■