在Android WebView上阻止JS设备定向devicemotion

时间:2019-07-14 11:23:10

标签: javascript android webview android-sensors

我已经为Android WebView编写了一个JS SDK,该SDK收集设备的方向和动作。 SDK会在窗口上监听deviceorientationdevicemotion事件,如下所示:

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

在某些设备/集成上,我没有传感器数据。我试图模仿“错误的”集成,试图通过将以下内容添加到应用清单中来阻止WebView传感器访问,但是没有运气。 JS事件仍被触发:

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

除了一起禁用JS之外,还有其他可能的方法来阻止WebView触发事件吗?

1 个答案:

答案 0 :(得分:1)

可能是,无法停止仅通过android触发JS事件,如果您愿意,它将禁用整个JS。

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

因此,您告诉您在某些设备上没有获取传感器数据,为此,您需要检查Webview简化代码。 示例代码在这里:

  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" />