首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Flex 透過 JavaScript 獲取客戶端 IP 與電腦名稱:ExternalInterface 實戰

     編輯:更多程式設計知識

核心限制

  • 僅限 Internet Explorer (ActiveX 技術)
  • 需將網站加入「信任站點」,並啟用「對未標記為安全的 ActiveX 控制項初始化並執行腳本」
  • 現代瀏覽器 (Edge/Chrome/Firefox) 全不支援,不適合生產環境

HTML 模板注入 JavaScript (index.template.html)

<script type="text/javascript">
function getClientPcName() {
    try {
        var net = new ActiveXObject("WScript.Network");
        return net.ComputerName;
    } catch (e) { return "Unknown"; }
}

function getClientIp() {
    try {
        var ctl = new ActiveXObject("rcbdyctl.Setting"); // 需特定控制項註冊
        return ctl.GetIPAddress;
    } catch (e) { return "Unknown"; }
}
</script>

注意:放在 html-template 目錄,而非 bin-debug,編譯時會自動複製。

Flex 呼叫端 (MXML/ActionScript)

<fx:Script>
    <![CDATA[
        import mx.controls.Alert;
        protected function init():void {
            var pcName:String = ExternalInterface.call("getClientPcName");
            var ip:String     = ExternalInterface.call("getClientIp");
            Alert.show("PC: " + pcName + "\nIP: " + ip);
        }
    ]]>
</fx:Script>

<s:Application creationComplete="init()" ...> ... </s:Application>

ExternalInterface 關鍵點

  • ExternalInterface.call("jsFunction", arg1, arg2...):同步呼叫 JS 函式,取得回傳值
  • ExternalInterface.addCallback("asFunction", asHandler):暴露 AS 函式給 JS 呼叫
  • 需在 HTML <object>/<embed> 標籤加 id 與 allowScriptAccess="always"

現代替代方案 (跨瀏覽器、無 ActiveX)

需求方案
客戶端 IP伺服端讀取 X-Forwarded-For / RemoteAddr,透過 API 回傳給前端
裝置識別Cookie / LocalStorage + 指紋庫 (FingerprintJS) 生成持久 ID
主機名稱無法在瀏覽器沙箱獲取 (安全限制),如需請改原生應用 (Electron/Tauri/桌面版)

結語

此技術屬於 IE 時代遺物,僅供維護舊專案參考。新專案請採用標準 Web 技術棧 (HTML5/JS/TypeScript + 後端 API),確保跨平台、安全、可維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved