web-dev-qa-db-ja.com

Android WebViewでブロックされたJS deviceorientation devicemotion

Android WebView用のJS SDKを作成して、デバイスの向きとモーションを収集します。SDKは、ウィンドウのdeviceorientationおよびdevicemotionイベントを次のようにリッスンします:

window.addEventListener('devicemotion', (event) => {...})
window.addEventListener('deviceorientation', (event) => {...})

一部のデバイス/統合で、センサーデータを取得できません。私は「悪い」統合を模倣して、以下をアプリマニフェストに追加することによってWebViewセンサーのアクセスをブロックしようとしましたが、運がありませんでした。 JSイベントは引き続きトリガーされます。

<activity
    Android:screenOrientation="portrait"
    Android:configChanges="keyboardHidden|orientation|screenSize"

JSをすべて無効にする以外に、WebViewがイベントをトリガーするのをブロックする他の可能な方法は何ですか?

更新:洞察:
最も問題のあるデバイスは次のとおりです:

  • Samsung Galaxy Tab a 10.1 SM-T580
  • Samsung Galaxy J5 Prime SM-G570M

更新2
IOS一部のデバイスでは同様の問題がありますが、最も問題なのは次のとおりです:

  • Mozilla/5.0(iPhone; CPU iPhone OS 12_3_1 like Mac OS X)AppleWebKit/605.1.15(KHTML、like Gecko)Mobile/15E148
14
Shlomi Schwartz

Androidを介してJSイベントのトリガーのみを停止することはできません。必要に応じて、JS全体を無効にします。

//disabled
  wView.getSettings().setJavaScriptEnabled(false);
//enabled
  wView.getSettings().setJavaScriptEnabled(true);

一部のデバイスではセンサーデータを取得できないとおっしゃっていましたが、そのためには、webview declerationコードを確認する必要があります。サンプルコードはこちらです:

  wView= new WebView(this);
  wView.getSettings().setLoadsImagesAutomatically(true);
  wView.getSettings().setJavaScriptEnabled(true);
  wView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);

  wView.setWebViewClient(new WebViewClient() {
        @SuppressWarnings("deprecation")
        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            Toast.makeText(MainActivity.this, description, Toast.LENGTH_SHORT).show();
        }

        @TargetApi(Android.os.Build.VERSION_CODES.M)
        @Override
        public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
            // Redirect to deprecated method, so you can use it in all SDK versions
            onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString());
        }
    });

  wView.loadUrl(Host_URL);

マニフェストで

<activity
  Android:name=".MainActivity"
  Android:configChanges="orientation|screenSize" />
1
Ali Azaz Alam