javascript - 仅使用 JS 确定 WebView 是否不可见
问题描述
我有一个带有 webView 的 Android 测试应用程序,如下所示:
<WebView
android:alpha="0"
android:id="@+id/myWebView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
我的主要活动加载了一个我正在运行 JS 内容的页面。JS 使用以下方式启用:
webSettings.setJavaScriptEnabled(true);
我的应用程序上有一个按钮,可以将 alpha 值从 0 切换到 1(显示/隐藏 webView)。
是否有任何“创造性”的方式来检测 JS 方面的变化?
我尝试过的事情:
- 检查requestAnimationFrame帧速率变化。
- 可见性 API
更新:
澄清一下,我正在寻找仅 JS的解决方案,实际的 JS 代码是在 WebView 环境中使用的 SDK。
我无法控制 Android 应用程序,完全控制 WebView 内容。
解决方案
你可以继承 android 的WebView
,覆盖它的setAlpha
方法并添加一些逻辑让网页知道当前的 alpha 值。
这是一个简化的示例:
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.webkit.WebView;
public class MyWebView extends WebView {
public MyWebView(Context context) {
super(context);
init();
}
public MyWebView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyWebView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
public MyWebView(Context context,
AttributeSet attrs,
int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
@SuppressLint("SetJavaScriptEnabled")
private void init() {
getSettings().setJavaScriptEnabled(true);
}
@Override
public void setAlpha(float alpha) {
super.setAlpha(alpha);
propagateAlphaToWebPage(alpha);
}
private void propagateAlphaToWebPage(float alpha) {
// setWebViewAlpha is a JS function that should be defined in your html's js
String jssnippet = "setWebViewAlpha("+alpha+");";
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
evaluateJavascript(jssnippet, null);
} else {
loadUrl("javascript:"+jssnippet);
}
}
}
您可能会发现有帮助的其他相关问题:
推荐阅读
- python - python中的图像分类总是得到相同的匹配分数
- cassandra - CassandraBeamIO 转换成 ROWS 的 Pcollection
- python - 将 Kibana 查询(创建索引模式)转换为 Python 请求
- php - fopen 不使用 date() 创建文件
- mongodb - 如何在 go mongo-driver 库中使用 Find().Select().One()
- java - 非法 ArgumentException:Nexus 6 的 CameraProcessProvider.bindToLifecycle 中的“找不到可用的相机”
- java - java.lang.NoSuchMethodError: 没有虚拟方法 canCancel(Z)Lcom/amazonaws/mobile/auth/ui/AuthUIConfiguration$Builder
- javascript - jQuery 滚动速度
- c# - 玩家在拾取 Rigidbody2D 对象时表现得很奇怪
- sql - 在 SQL 中为变量的值赋值