2016-09-23 19 views
6

私のアプリにはWKWebViewがあり、www.google.comやその他のロケーションサービスを必要とするウェブサイトの閲覧を開始すると、私が既に持っていてもその場所にアクセスするための許可を求めるポップアップウィンドウが表示されます私の場所を共有することができます。WKWebViewが繰り返しアクセスを許可するのを防ぐ方法を教えてください。

私がこの位置情報を管理するために唯一行ったことは、info.plistNSLocationWhenInUseUsageDescriptionという属性を追加したことです。

ウェブ上で回答が見つかりませんでしたので、本当に感謝しています。

答えて

3

非常に難しいと言われますが、可能です。 navigator.geolocationにリクエストを傍受し、アプリに転送した後、CLLocationManagerで場所を取得し、JavaScriptを再度注入するJavaScriptコードを注入する必要があります。

  1. navigator.geolocationのメソッドをオーバーライドするあなたのWKWebView構成にWKUserScriptを追加します。

    は、ここでは簡単な方式です。あなたのWKWebViewにスクリプトメッセージハンドラを追加しWKUserContentController.add(_:name:)

    navigator.geolocation.getCurrentPosition = function(success, error, options) { ... }; 
    navigator.geolocation.watchPosition = function(success, error, options) { ... }; 
    navigator.geolocation.clearWatch = function(id) { ... }; 
    
  2. :注入されたJavaScriptは、次のようになります。注入されたJavaScriptはこのように、あなたのハンドラを呼び出す必要があります:Webページが場所を要求します場合は、この方法は非常にあなたのアプリケーションは、Webページが場所を要求している知っているだろうuserContentController(_:didReceive:)を発射します

    window.webkit.messageHandlers.locationHandler.postMessage('getCurrentPosition'); 
    
  3. 。いつものようにCLLocationManagerの助けを借りてあなたの場所を探してください。

  4. ここで、場所を要求JavaScriptにwebView.evaluateJavaScript("didUpdateLocation({coords: {latitude:55.0, longitude:0.0}, timestamp: 1494481126215.0})")で注入します。 もちろん、あなたのインジェクションされたJavaScriptは、didUpdateLocation機能を保存して成功したハンターを起動する準備ができているはずです。

非常に長いアルゴリズムですが、機能します。

関連する問題