8

PhantomJS で qunit テスト ケースを実行しようとしています。phantomJS が DOM の navigator.geolocation 関数にアクセスしようとすると、私のテストの 1 つが停止します。同じテストがブラウザーで正常に機能していますが、phantomJS を使用してコンソールでハングするだけです。

phantomJS はジオロケーションをサポートしていますか? なにか提案を?

次の if 条件で壊れます

  if(navigator.geolocation) {
            window.navigator.geolocation.watchPosition(updateLocation, null, { frequency: 3000 });
        }
4

2 に答える 2

11

いいえ。

features.jsの例を確認してください。

>phantomjs.exe features.js
Detected features (using Modernizr 2.0.6):

Supported:
  touch
  generatedcontent
  fontface
  flexbox
  canvas
  canvastext
  postmessage
  websqldatabase
  hashchange
  history
  draganddrop
  websockets
  rgba
  hsla
  multiplebgs
  backgroundsize
  borderimage
  borderradius
  boxshadow
  textshadow
  opacity
  cssanimations
  csscolumns
  cssgradients
  cssreflections
  csstransforms
  csstransitions
  localstorage
  sessionstorage
  webworkers
  applicationcache
  svg
  inlinesvg
  smil
  svgclippaths

Not supported:
  csstransforms3d
  webgl
  geolocation
  indexeddb
  video
  audio
于 2013-04-09T12:21:44.417 に答える
5

初期化時に必要な関数を DOM に挿入することで、テストの実行やその他の処理を行うために「geolocation-fake-support」を追加できます。次の例では、navigator.geolocation.getCurrentPosition を偽装しているため、ブラウザーの Web サイトがこの API エンドポイントを呼び出すと、PhantomJS は常に構成された場所を返します。

webpage.onInitialized = function() {
    webpage.injectJs('geolocation.js')
};

geolocation.js:

window.navigator.geolocation = {
    getCurrentPosition: function (success, failure) {
        success({
            coords: {
                // Will always return Germany, Rostock
                latitude: 54.0834,
                longitude: 12.1004

            }, timestamp: Date.now()
        });
    }
};
于 2016-05-29T18:22:37.767 に答える