是否可以阻止特定window
事件在JavaScript
内WebView
内发生?具体来说,我想阻止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
修复之前访问它。
答案 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)