簡體   English   中英

防止Android WebView中的JS方向更改事件具有鎖定的方向

[英]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?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM