javascript - 防止 Android WebView 中锁定方向的 JS 方向更改事件

标签 javascript android android-webview dom-events orientation-changes

基本上:

是否可以防止在 WebView 内运行的 JavaScript 中触发特定的 window 事件?具体来说,我想防止触发 window.orientationchange 事件。

(或者有什么方法可以绝对确定我在 WebView 中,而不是在普通的 Chrome/内置浏览器窗口中,而不覆盖用户代理?)

详细信息:

我的任务是将现有的 Web 应用程序嵌入到 Android 上的基本 WebView 容器中。该网络应用程序不支持纵向配置,也不支持调整为纵向宽高比的浏览器。

为了解决这个问题,JavaScript 中有一个 window.orientationchange 处理程序来检测此问题并在必要时显示错误消息。

为了用户体验,我们有以下 Activity XML 来防止用户更改方向:

<activity
    android:name="com.example.my-stackoverflow-app"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
    android:screenOrientation="landscape">

这非常有效。问题是,暂停/恢复 Activity 时会触发 orientationchange 事件。

由于主屏幕是纵向的,window.orientationchange 处理程序会在 Activity 重新调整自身方向并将我锁定在应用程序之外之前检测到这一点。

当然,setTimeout 调用可以修复此问题,但我的窗外有一座相当大的摩天大楼,在求助于 setTimeout 修复之前我将访问它。

最佳答案

如果您无法修改 WebView 应用程序的用户代理,您可以从 WebView 应用程序加载一个 javascript: URL,该应用程序设置一个标志来表明您正在 WebView 中运行,然后在事件触发时检查该标志JS...每次加载新页面时,您都需要重新注入(inject)此 JS。您还可以从 java 添加 JavaScript 接口(interface)对象;并测试它是否存在以检测 WebView。一旦添加了 JS 接口(interface)对象,它将在页面加载时自动维护,但要小心(请参阅文档以获取警告[1])

出于好奇,为什么您无法覆盖 UA?

[1] http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object , java.lang.String)

关于javascript - 防止 Android WebView 中锁定方向的 JS 方向更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22471344/

相关文章:

android - 共享 Intent 过滤器

android - 如何在 WebView 中获取 "User Consent"?

javascript - 如何使用jquery获取循环中单元格的值

javascript - 加载 div 时无法运行 jquery 脚本,在加载 DOM 之前运行 jquery 代码

javascript - iPad 上的 jQuery Selectric 错误

android - 在android中保存来自服务器的图像的最佳方法

java - 如何以编程方式更改背景形状的颜色

javascript - React Native WebView html <select> 无法在 Android 平板电脑上打开选项

Android - 奇怪的行为 html 样式最大宽度

javascript - 在 Thunderbird 扩展中获取选定的消息数据