2012-12-13 27 views
8

Tôi đã tạo ứng dụng PhoneGap cho iPhone sử dụng vị trí địa lý thông qua JavaScript bên trong chế độ xem web.Làm thế nào để ngăn chặn nhắc đôi cho vị trí địa lý trong ứng dụng Phonegap?

Khi tôi chạy ứng dụng lần đầu tiên, nó sẽ nhắc tôi cho phép vị trí địa lý cho ứng dụng này.

Khi tôi nhấn "ok", nó sẽ nhắc tôi một lần nữa với cùng một câu hỏi nhưng lần này nó nói rằng "index.html" muốn có quyền sử dụng vị trí địa lý.

Điều đó có ý nghĩa vì iOS có thể muốn có quyền cho phép định vị địa lý cho ứng dụng lần đầu tiên và lần thứ hai trình duyệt muốn có quyền.

Tuy nhiên, vì không dẫn đến trải nghiệm người dùng tuyệt vời:

Làm cách nào để ngăn chặn lời nhắc kép này? (Tôi muốn được đủ nếu nhắc thứ 2 có thể được ngăn chặn)

Trả lời

14

Tôi đã tìm ra nguyên nhân gây ra sự cố.

Cuộc gọi đến navigator.geolocation.getCurrentPosition(onsuccess, onerror) xảy ra trước khi Phonegap được tải hoàn toàn.

Điều này có nghĩa là cuộc gọi vị trí địa lý của xem web (và không phải là cuộc gọi gốc qua PhoneGap) đang được kích hoạt, một lần nữa sẽ yêu cầu quyền (có ý nghĩa). So sánh nó với trình duyệt Safari thông thường trên điện thoại thông minh của bạn. Nó sẽ yêu cầu quyền định vị địa lý cho mọi trang web mới. Cũng giống như khi tải index.html qua PhoneGap khi khởi động ứng dụng.

Tuy nhiên, giải pháp là phải chờ cho sự kiện deviceready mà bị sa thải khi PhoneGap đã nạp đầy đủ:

document.addEventListener("deviceready", function(){ 
    navigator.geolocation.getCurrentPosition(onsuccess, onerror, params); 
}, false); 

này sẽ làm cho các API PhoneGap sẵn mà ghi đè mặc định HTML5 gọi gelocation của trình duyệt và nhận được vị trí địa lý của thiết bị thông qua cuộc gọi gốc (mà bạn đã chấp nhận trong lời nhắc đầu tiên).

này sẽ làm việc vì cuộc gọi API PhoneGap của rất giống với cuộc gọi W3C tiêu chuẩn cho HTML5: http://docs.phonegap.com/en/2.2.0/cordova_geolocation_geolocation.md.html#Geolocation

+0

timo câu trả lời xuất sắc. tất cả những người khác nên bị xóa khi họ đang lan truyền thông tin không chính xác. – r3wt

0

Có xem xét này: Location permission alert on iPhone with PhoneGap

thứ hai có vẻ là cảnh báo Webkit. Để ngăn chặn điều này, bạn dường như chỉ cần di chuyển tất cả các tệp js của bạn vào thư mục gốc. Nói cho tôi biết, nếu nó hoạt động vì tôi sẽ sớm giải quyết vấn đề tương tự.

+0

Không, đó không phải là nó, nhưng liên kết của bạn chỉ cho tôi đi đúng hướng. Kiểm tra câu trả lời của tôi cho câu hỏi. – Timo

0

Cuối cùng cố định vấn đề này.

TRÊN index.html chỉ di chuyển cordova.js của bạn lên

< script src = "cordova.js"> </script>

như file js đầu tiên được đưa vào (đặc biệt là đảm bảo nó ở trên bản đồ bao gồm js).Điều này sẽ đảm bảo rằng dấu nhắc chỉ hiển thị một lần

+0

hữu ích, nhưng xung đột xảy ra, khi tập lệnh này được tải như bạn đã đề xuất, các dịch vụ web không thể tải và cũng không đưa ra bất kỳ lỗi nào. Giải pháp là gì? – developer

+0

Tôi đang sử dụng sencha touch 2 và Ext.ajax.request có xung đột với điều đó. làm thế nào để tránh điều này? – developer

+0

Điều này rất nguy hiểm, hãy cẩn thận. Bạn có thể đang chạy vào các điều kiện chủng tộc hoạt động trong trường hợp của bạn nhưng có thể không hoạt động trong các môi trường khác (tùy thuộc vào tốc độ internet của người dùng, loại trình duyệt, v.v ...). Bạn hoàn toàn nên đọc và hiểu lệnh thực thi tập lệnh trước tiên: http://www.html5rocks.com/en/tutorials/speed/script-loading/?redirect_from_locale=de – Timo

0

tôi giải quyết vấn đề này bằng cách di chuyển

<script src="cordova.js"></script> 

như kịch bản cuối cùng được đưa

+0

Điều này rất nguy hiểm, hãy cẩn thận. Bạn có thể đang chạy vào các điều kiện chủng tộc hoạt động trong trường hợp của bạn nhưng có thể không hoạt động trong các môi trường khác (tùy thuộc vào tốc độ internet của người dùng, loại trình duyệt, v.v ...). Bạn hoàn toàn nên đọc và hiểu lệnh thực thi tập lệnh trước: http://www.html5rocks.com/en/tutorials/speed/script-loading/?redirect_from_locale=de – Timo

Các vấn đề liên quan