--- title: WiFi アクセスポイントのモニタリング slug: orphaned/Monitoring_WiFi_access_points original_slug: Monitoring_WiFi_access_points ---
{{ gecko_minversion_header("1.9.1") }}
UniversalXPConnect 特権を用いたコードを利用することで、周囲の WiFi アクセスポイントの SSID 、 MAC アドレス、信号強度の一覧を取得することができます。この機能は、主に WiFi 情報に基づいた geolocation サービスのために導入されました。
この例では、利用可能なアクセスポイントの一覧を出力します。
<html>
<head>
<title>WiFi Monitor Example</title>
<script>
var count = 0;
function test() {
}
test.prototype =
{
onChange: function (accessPoints)
{
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var d = document.getElementById("d");
d.innerHTML = "";
for (var i=0; i<accessPoints.length; i++) {
var a = accessPoints[i];
d.innerHTML += "<p>" + a.mac + " " + a.ssid + " " + a.signal + "</p>";
}
var c = document.getElementById("c");
c.innerHTML = "<p>" + count++ + "</p>";
},
onError: function (value) {
alert("error: " +value);
},
QueryInterface: function(iid) {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
if (iid.equals(Components.interfaces.nsIWifiListener) ||
iid.equals(Components.interfaces.nsISupports))
return this;
throw Components.results.NS_ERROR_NO_INTERFACE;
},
}
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var listener = new test();
var wifi_service = Components.classes["@mozilla.org/wifi/monitor;1"].getService(Components.interfaces.nsIWifiMonitor);
wifi_service.startWatching(listener);
</script>
</head>
<body>
<div id="d"><p></p></div>
<div id="c"><p></p></div>
</body>
</html>
上述のコードでは、まずアクセスポイントの一覧に変更が起こった時点で通知を受け取るリスナーオブジェクトのプロトタイプが作成されます。このオブジェクトは11行目から40行目にかけての部分に相当します。
onChange() メソッド(13~27行目)は UniversalXPConnect 特権を有効にすることから始まり、次にアクセスポイントの一覧を表示する div (d) の内部 HTML を消去します。19~22行目の for ループ部分では、 accessPoints 配列に渡されたアクセスポイントの一覧を、 MAC アドレス、 SSID 、信号強度に分けて div 要素内に HTML として出力します。
そして、 div (c) は一覧が読み込まれるたびに更新されます。
onError() メソッドは、単に受け取ったエラーコードを表示するメッセージボックスを開きます。
アクセスポイントのモニタリングを始めるためには、まず44行目のようにリスナーオブジェクトのインスタンスを作成しなければなりません。その後、45行目で示すように WiFi モニターインターフェースへアクセスを行い、47行目で WiFi モニタリングサービスの startWatching() メソッドを呼び出すことでモニタリングが始まります。