首先說明一下,用JS方式獲取不是調用webservices和httpservices。
在我們每一個FLex web工程中,都有那么一個文件夾bin-debug,里面有個index.html文件,我的個人理解是這樣的,首先網頁運行的時候,mxml的文件會被編譯為swf,那么swf如何在瀏覽器中展現,就是通過這個html文件,相當于在html文件中嵌入了一個swf的object組件。 www.companysz.com
所以,在這個html中寫入js的代碼,來獲取ip地址我個人覺得是可行的。因此出現以下代碼。
在index.html中增加script標簽,實際代碼如下:
function getClientPcName()
{
//alert("請將您瀏覽器Internet選項中的“對沒有標記為安全的ActiveX控件進行初始化和腳本運行”設置為“啟用”!/n/n然后刷新本頁登陸!");
///window.onerror = killErrors; +"/"+WshShell.UserName;
var WshShellPcName = new ActiveXObject("WScript.Network");
var ComputerName = WshShellPcName.ComputerName ;
//添加信任站點(http://192.168.1.5)
//alert(ComputerName);
return ComputerName;
}
function getClientIp()
{
var WshShellIp = new ActiveXObject("rcbdyctl.Setting");
var ip = WshShellIp.GetIPAddress;
return ip;
}
</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
Safari 1.3 及更高版本 MacOS
適用于 Linux 的 Flash Player 9.0.31.0 及更高版本在以下瀏覽器中支持 ExternalInterface 類:
瀏覽器
Mozilla 1.7.x 及更高版本
Firefox 1.5.0.7 及更高版本
SeaMonkey 1.0.5 及更高版本
ExternalInterface 類要求用戶的 Web 瀏覽器支持 ActiveX® 或由某些瀏覽器公開的 NPRuntime API 以實現插件腳本處理。即使上面未列出瀏覽器和操作系統組合,如果它們支持 NPRuntime API,則它們也應該支持 ExternalInterface 類。
注意:在將 SWF 文件嵌入到 HTML 頁中時,請確保設置 id 屬性,并且 object 和 embed 標簽的 id 和 name 屬性不包含以下字符:
. - + * / /
注意:Flash Player 9.0.115.0 版和更高版本允許在 id 和 name 屬性中使用 .(句點)字符。
在瀏覽器中運行的 Flash Player 10 和更高版本中,以編程方式使用此類打開彈出窗口可能不會成功。不同的瀏覽器(和瀏覽器配置)可能會隨時阻止彈出窗口;不能保證可以顯示任何彈出窗口。不過,為了盡可能成功,請僅在作為用戶操作的直接結果執行的代碼中使用此類打開彈出窗口(例如,在鼠標單擊或按鍵事件的事件處理函數中)。
利用 ActionScript,可以在 HTML 頁上執行以下操作:
調用任何 JavaScript 函數。
傳遞任意數量、具有任意名稱的參數。
傳遞各種數據類型(Boolean、Number、String 等等)。
接收來自 JavaScript 函數的返回值。
通過在 HTML 頁上使用 JavaScript,可以:
調用 ActionScript 函數。
使用標準的函數調用表示法傳遞參數。
將值返回給 JavaScript 函數。
Flash Player 當前不支持嵌入到 HTML 表單中的 SWF 文件。
注意:在 Adobe AIR 中,ExternalInterface 類可用于在 HTMLLoader 控件中加載的 HTML 頁的 JavaScript 與嵌入在該 HTML 頁的 SWF 內容中的 ActionScript 之間實現通信。
在我們的mxml文件中使用這個類。進行調用js中的獲取ip和pcname的函數:
pcName = ExternalInterface.call("getClientPcName");
ip = ExternalInterface.call("getClientIp");
您可以嘗試Alert,看一下對不對。這樣還有一個問題,加入您的機器作為服務器,那么在服務器上獲取到的ip會是:127.0.0.1,處理它我相信你會有辦法的。
新聞熱點
疑難解答