[英]Prevent JS orientationchange events in Android WebView with locked orientation
是否可以防止在WebView
內運行的JavaScript
觸發特定的window
事件? 具體來說,我想防止觸發window.orientationchange
事件。
(或者,是否有任何方法可以絕對確定我在WebView
而不是在普通的Chrome /內置瀏覽器窗口中而不覆蓋User-Agent?)
我的任務是將現有的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">
這很完美。 麻煩的是, orientationchange
暫停/恢復活動時,事件被解雇。
由於主屏幕是縱向屏幕,因此window.orientationchange
處理程序會在 “活動”重新定位自身之前將其檢測到,並將我鎖定在應用程序之外。
很自然,可以通過setTimeout
調用來解決此問題,但是在使用setTimeout
修復程序之前,我的窗口外部有一個相當大的摩天大樓,我將在其中進行訪問。
如果您無法修改WebView應用程序的用戶代理,則可以從WebView應用程序加載javascript:URL,該URL設置一個標志來表示您正在WebView中運行,然后在JS中觸發事件時檢查該標志。 。您需要在每次加載新頁面時重新注入此JS。 您也可以從Java中添加JavaScript接口對象; 並測試是否存在以檢測WebView。 一旦添加了JS接口對象,它就會在頁面加載期間自動維護,但要小心(請參閱文檔以獲取警告[1])
出於好奇,您為什么無法覆蓋UA?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.