vc++訪問javascript(1)–window在指令碼引擎中的作用

來源:互聯網
上載者:User

    我們假定在VC++中已經得到網頁的document指標,然後訪問javascript有兩種方法:一種是通過document.Script,另一種是通過document.parentWindow(以下直接用window)。它們都具有相同的效果,下面我們就以window為討論的目標。

    在實際的網頁用戶端指令碼開發中,我們曾經混合使用過javascript和vbscript。由於javascript的強大和靈活,在網頁中已經很少再使用vbscript了,可有些場合,我們又不得不用。比如,在一個網頁中嵌入realplayer播放器控制項,我們可以用javascript調用realplayer控制項的屬性和方法,卻只能用vbscript響應realplayer控制項的事件。具體資訊可以參見realplayer的官方協助網頁http://service.real.com/help/library/guides/extend/htmfiles/ch01_emb.htm#23018

很顯然,javascript和vbscript是兩個不同的指令碼引擎,而且在一個頁面環境中,肯定也是以不同的引擎執行個體而存在。然而,我們發現在兩個不同指令碼引擎中聲明的變數和方法可以互相訪問和調用。這是怎麼實現的呢?我們嘗試著列舉幾個技術要點就清楚了。

  1.  二者都支援全域對象。window就是二者的全域對象,凡是全域對象的屬性和方法,在訪問時,可不加上對象名。如既可以使用window.alert("hello world"),也可以使用alert("hello world");
  2. window對象包含二者執行個體的引用。
  3. window對象實現了IDispatchEx介面,將二者執行個體中的所有屬性和方法,通過IDispatchEx介面向外暴露,即讓外部代碼認為,指令碼引擎中定義的屬性和方法同時也是window對象的。

比如用vbscript定義了一個echo方法。然後,在javascript中訪問vbscript中的echo方法。我們分析一下是如何進行的。

<script language="vbscript">
sub echo(s)
 alert s
end sub
</script>

 

<script language="javascript">
   echo("hello world");
</script>

 

首先,vbscript中定義的echo方法,如上所述可以看作是window對象的方法進行訪問。javascript引擎先在本執行個體的空間中尋找echo方法,不成功,然後尋找全域對象window,找到了,然後執行。

 

 綜上所述:我們可以認為window在指令碼引擎中的作用主要有三個:

  1. window作為指令碼引擎的全域對象,從而使代碼在訪問window中的屬性和方法時更簡潔。如:window.alert("hello world")和alert("hello world");所以,這一個作用是可有可無的。
  2. window包含指令碼引擎執行個體的引用,並通過IDispatchEx介面路由了指令碼引擎執行個體中的所有屬性和方法。從而使得不同指令碼引擎中聲明的變數和方法可以互相訪問和調用。如果說沒有特別的應用環境非讓我們使用vbscript不可的話,對於我而言,我是會一直單純的使用javascript的。所以,這一個作用也是可有可無的。
  3. 在VC++中我們可以得到網頁的document指標,要想訪問指令碼引擎中的屬性和方法,可以通過document.Script或者document.parentWindow(即window)。所以,這一個作用也是可有可無的。

所以,window的以上設計並非必須,只是可以讓我們書寫代碼更簡潔,應用更靈活一些而已。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.