使用锁定方向防止Android WebView中的JS orientationchange事件

时间:2014-03-18 05:47:43

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

基本上:

是否可以阻止特定window事件在JavaScriptWebView内发生?具体来说,我想阻止window.orientationchange事件被解雇。

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

详细说明:

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

要解决此问题,window.orientationchange中有一个JavaScript处理程序可以检测到此情况并在必要时显示错误消息。

对于用户体验,我们有以下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">

这完美无缺。问题是,当暂停/恢复活动时,orientationchange事件被触发。

由于主屏幕是纵向的,window.orientationchange处理程序正在检测此,然后活动重新定位并锁定我的应用程序。

很自然地,setTimeout电话会修复这个问题,但是在我的窗口外面有一个相当大的天空刮板,我将在使用setTimeout修复之前访问它。

1 个答案:

答案 0 :(得分:0)

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

出于好奇,你为什么不能覆盖UA?

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