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

JavaScript 獲取瀏覽器城市級地理位置:新浪 IP 接口實現與備選方案

     編輯:程式設計綜合問答

核心方案:新浪 IP 歸屬查詢接口 (支援城市級)


<script src="https://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js"></script>
<script>
    // 全域變數 remote_ip_info 可用
    console.log("省份:" + remote_ip_info.province);
    console.log("城市:" + remote_ip_info.city);
    console.log("ISP:" + remote_ip_info.isp);
</script>

完整封裝函數 (含錯誤處理與回調)


function getLocationBySina(callback) {
    // 避免重複載入腳本
    if (window.remote_ip_info) {
        callback(window.remote_ip_info);
        return;
    }
    var script = document.createElement('script');
    script.src = 'https://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js';
    script.onload = function() {
        if (window.remote_ip_info) {
            callback(window.remote_ip_info);
        } else {
            callback(null);  // 解析失敗
        }
    };
    script.onerror = function() { callback(null); };
    document.head.appendChild(script);
}

// 使用
getLocationBySina(function(info) {
    if (info) {
        alert("您在:" + info.province + " " + info.city);
        // 繼續業務邏輯...
    } else {
        alert("無法獲取位置,請手動選擇城市");
    }
});

備選方案對比

服務接口支援城市HTTPS頻率限制備註
新浪iplookup.php?format=js✅❌寬鬆最常用、穩定
淘寶ip.taobao.com/outGetIpInfo✅✅嚴格需代理/簽名
高德restapi.amap.com/ip✅✅需 Key精度高、官方 SDK
瀏覽器 Geolocation APInavigator.geolocationGPS/WiFi 精度✅ 強制用戶授權非 IP 定位、需 HTTPS、用戶同意
ip-api.comip-api.com/json/✅✅45/分鐘免費商用需付費

重要限制說明

  • IP 定位 ≠ 真實物理位置:僅反映 IP 註冊/出口地址,企業/代理/VPN 用戶可能顯示機房/代理城市
  • 無法獲取城市:表示該 IP 段未在資料庫細分到城市級,無解
  • HTTP 接口在 HTTPS 頁面被阻擋:新浪接口無 HTTPS,需自建代理或改用 HTTPS 服務商

生產環境建議

  1. 優先用 **Geolocation API** (用戶授權前提下精度最高)
  2. 失敗回退 **HTTPS IP 服務** (高德/ip-api/自建代理新浪)
  3. 最終兜底 **用戶手動選擇城市**
  4. 緩存結果 (localStorage, 24h) 減少請求

總結

新浪 iplookup.php?format=js 可獲取城市級 IP 歸屬,remote_ip_info.city 即為城市。注意 HTTP 混合內容限制、IP 定位固有不準確性、用戶隱私合規。生產環境建議多層回退策略。

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