2012-02-02 100 views
1

我必須在這裏做錯事,但我找不到...我爲公司網站製作一個頁面,除其他外,根據用戶的當前位置爲工作地點提供路線。爲了獲得他們的位置,我使用了Firefox中實現的Geolocation API(我正在使用FF9和現在的FF10進行測試)。就目前而言,我與在示例代碼測試Wikipedia article地理定位API不起作用,谷歌地圖也不是「我的位置」

<html> 
<head> 
<title>Geolocation Test</title> 
<script type='text/javascript'> 
var gl; 

function displayPosition(position) { 
    var p = document.getElementById("p"); 
    p.innerHTML = "<table border='1'><tr><th>Timestamp</th><td>" + position.timestamp + 
    "<tr><th>Latitude (WGS84)</th><td>" + position.coords.latitude + " deg</td></tr>" + 
    "<tr><th>Longitude (WGS84)</th><td>" + position.coords.longitude + " deg</td></tr></table>"; 
} 

function displayError(positionError) { 
    alert("error " + positionError.code); 
} 

try { 
    if (typeof navigator.geolocation === 'undefined'){ 
    gl = google.gears.factory.create('beta.geolocation'); 
    } else { 
    gl = navigator.geolocation; 
    } 
} catch(e) {} 

if (gl) { 
    gl.getCurrentPosition(displayPosition, displayError); 
} else { 
    alert("Geolocation services are not supported by your web browser."); 
} 
</script> 

<body> 
<p id='p'></p> 
</body> 
</html> 

(複製/粘貼到文本編輯器,另存爲「whatever.html」,並將該文件拖動到瀏覽器打開它)

非常簡單的代碼,它實際上運行良好,上週四,01/26/12。 (我知道,我知道,人們說,「它昨天工作了!」,當他們真的搞砸了,但我發誓它真的做到了。)從那以後,它一直給我錯誤代碼2,「POSITION_UNAVAILABLE」。我在工作網絡上使用我的工作計算機,家中互聯網上的工作計算機和家用計算機以及我的手機上的工作計算機在WiFi熱點上進行了試用,並且每次都給出錯誤代碼2。

我想也許我會莫名其妙地在我的瀏覽器或我的網絡設置或東西(雖然我無法想象)瘋玩的東西了,所以我試了下測試,每個人都應該能夠做到:

  1. 轉到maps.google.com。
  2. 搜索「西雅圖」(或其他位置,無論)。
  3. 點擊「查詢路線」按鈕。
  4. 在左邊的指示框中,「A」應該說「我的位置」,「B」應該說「西雅圖」。 (如果A中沒有提及「我的位置」,請在框中鍵入「m」,並且自動填充下拉菜單通常會將「我的位置」作爲第一個選項。)
  5. 單擊「取得方向」按鈕。
  6. Firefox應該彈出消息說maps.google.com想知道您的位置。點擊「分享位置」。
  7. 幾秒鐘後,它應該會顯示您從某處(無論它認爲您的服務器在哪裏)到西雅圖的方向,或者「A」框應該變爲空白,並且會顯示「無法找到您的位置」或類似朝向地圖的頂部。

這是奇怪的事情:我從來沒有得到這個在任何計算機上工作。我的工作電腦(在FF10和Chrome上),我的同事電腦,我的家用電腦和我的GF工作電腦都做同樣的事情;沒有人可以找到位置。

所以我的問題是:是位置API下跌或什麼,或者我搞砸了嗎?我一直無法在網上找到API停機的跡象,而且看起來中斷的可能性不大,但如果是這樣,爲什麼它在我嘗試過的任何計算機上都無法工作?其他人是否可以複製這些發現或知道我做錯了什麼?

謝謝!

回答

1

你的腳本能正常工作,並在谷歌地圖的定位功能,以及(FF9.0.1)

你在哪裏? (我的意思是身體)如果您身處偏遠的地方,Google可能無法計算您的位置!嘗試在一些大城市也許...

另一種可能性是,您無法訪問Google的位置服務器,就好像您的ISP阻止它...

+0

是的,API已啓動並正在運行。由於您已經嘗試了屬於多人的電腦,因此我也排除您將瀏覽器設置爲永遠不會共享您的位置。這聽起來似乎更合理,因爲你的瀏覽正在嘗試,但因爲某些事情正在發展而失敗。 – miguev 2012-02-02 00:42:44

+0

我在俄勒岡州的波特蘭。我希望谷歌知道那是什麼。 :)我可以看到一個ISP阻止它,但我已經嘗試了至少應該有四個獨立的提供者:我的工作互聯網訪問實際上是通過內部網連接到東海岸某處的外部世界,然後我的家庭互聯網ISP,我的Android手機的wifi熱點,以及我的GF的工作連接。它會彈出一個框詢問我是否想每次分享位置,以便該部分工作正常,但隨後會返回錯誤代碼2和我的測試代碼,並且無法在Google地圖上找到「我的位置」。 – Sam 2012-02-02 14:58:29

0

您的腳本似乎在Chrome中工作,但不在FF中。我在FF中遇到的錯誤是位置不可用,這意味着FF的位置服務無法訪問我的wifi網絡。我假設你收到的錯誤是你的警報錯誤2?

如果你使用Firebug,你可以在第15行設置一個停止點。當它停止時,點擊右邊的Watch面板中的positionError,看看代碼是什麼。礦讀:代碼2轉換爲不可用。

我建議你有一些其他的代碼來處理這個實例。

+0

positionError.code在JS警報框中被放出;每次都是代碼2。據我所知,只要您有任何類型的互聯網接入,地理定位API就應該能夠正常工作,並且在許多情況下,實際上WiFi應該更加準確,因爲Google已經繪製了一堆wifi熱點的位置。但這就是爲什麼我嘗試了多臺計算機和連接類型。在我的公司內部網上的生產代碼中,我確實有代碼來處理找不到位置(它會選擇默認值),但找不到位置會使其不太有用。 – Sam 2012-02-02 15:02:14

+0

好吧,3分:1)谷歌可能沒有映射所有的內部wifi網絡,可能實際上不知道它們在哪裏。 2)不確定爲什麼FF在Chrome沒有獲得位置時,他們應該使用相同的位置提供商。無論瀏覽器是否得到相同的結果? 3)這是一個內部唯一的網站?如果是這樣,您可能需要升級到Google Maps for Business,Google的企業版。 – 2012-02-02 15:17:49

+0

我以爲Geolocation API至少應該通過你的IP地址得到你ISP的位置,如果它不知道WiFi點在哪裏的話。無論如何,正如我在文章中指出的,Chrome無法在Google地圖中找到該位置。使用簡單的HTML測試代碼,甚至在將選項設置爲「允許所有站點跟蹤我的物理位置」之後,它甚至不會彈出消息詢問我是否要共享位置。測試代碼給出錯誤代碼1,「PERMISSION_DENIED」。 – Sam 2012-02-02 15:24:55