基本上:
是否可以防止在 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/