首先說明一下,用JS方式取得不是呼叫webservices和httpservices。
在我們每一個FLex web工程中,都有那麼一個資料夾bin-debug,裡面有個index.html文件,我的個人理解是這樣的,首先網頁運行的時候,mxml的文件會被編譯為swf,那麼swf如何在瀏覽器中展現,就是透過這個html文件,相當於在html檔案中嵌入了一個swf的object元件。 www.jb51.net
所以,在這個html中寫入js的程式碼,來取得ip位址我個人覺得是可行的。因此出現以下代碼。
在index.html中增加script標籤,實際代碼如下:
如何在flex中呼叫呢,那就用到了Flex的這個類別:flash.external.ExternalInterface。
對於ExternalInterface類,adobe是這樣解釋的:
ExternalInterface 類別是外部 API,這是一個在 ActionScript 和 Flash Player 容器之間實現直接通信的應用程式編程接口,例如,包含 JavaScript 的 HTML 頁。 Adobe 建議使用 ExternalInterface 實作 JavaScript 與 ActionScript 之間的所有通訊。
在 Flash Player 中,可以使用 HTML 頁中的 JavaScript 來呼叫 ActionScript 函數。 ActionScript 函數可以傳回一個值,JavaScript 會立即接收它作為該呼叫的回傳值。
此功能取代 fscommand() 方法。
在下列瀏覽器和作業系統的組合中可以使用 ExternalInterface 類別:
瀏覽器作業系統作業系統
Internet Explorer 5.0 及更高版本Windows
Netscape 8.0 及更高版本Windows MacOS
Mozilla 1.7.5 及更高版本Windows MacOS
Firefox 1.0 及更高版本Windows MacOS
Firefox 1.0 及更高版本更高版本Windows MacOS
Safari 1.3 及更高版本 MacOS
瀏覽器
Mozilla 1.7.x 及更高版本
Firefox 1.5.0.7 及更高版本
SeaMonkey 1.0.5 及更高版本
ExternalInterface 類別要求用戶的Web 瀏覽器支援用戶的Web 瀏覽器支援ActiveX® 或由某些瀏覽器公開的NPRuntime API 以實現插件腳本處理。即使上面未列出瀏覽器和作業系統組合,如果它們支援 NPRuntime API,則它們也應該支援 ExternalInterface 類別。
. - * / /
在瀏覽器中執行的 Flash Player 10 和更高版本中,以程式設計方式使用此類開啟彈出視窗可能不會成功。不同的瀏覽器(和瀏覽器配置)可能隨時阻止彈出視窗;不能保證可以顯示任何彈出視窗。不過,為了盡可能成功,請僅在作為使用者操作的直接結果執行的程式碼中使用此類開啟彈出視窗(例如,在滑鼠單擊或按鍵事件的事件處理函數中)。
利用 ActionScript,在 HTML 頁面上可以執行以下操作:
呼叫任何 JavaScript 函數。
傳遞任意數量、具有任意名稱的參數。
傳遞各種資料型別(Boolean、Number、String 等等)。
接收來自 JavaScript 函數的回傳值。
呼叫 ActionScript 函數。
使用標準的函數呼叫表示法傳遞參數。
將值傳回 JavaScript 函數。
注意:在 Adobe AIR 中,ExternalInterface 類別可用於在 HTMLLoader 控制項中載入的 HTML 頁的 JavaScript 與嵌入在該 HTML 頁的 SWF 內容中的 ActionScript 之間實作通訊。
在我們的mxml檔中使用這個類別。進行呼叫js中的取得ip和pcname的函數:
pcName = ExternalInterface.call("getClientPcName");
ip = ExternalInterface.call("getClientIp");