Android webview踏み込み記録
1687 ワード
window.innerWidth
もzeptoの$(window).width()
も取得した画面幅は0である.事のいきさつ:私达の応用シーンの中で、外はAppを引っ張って、Appは冷やして5秒のスタートアップの広告があって、この时本文も同期してレンダリングして、しかし広告は本文の上で覆います.広告終了後の本文の内容は同期でも非同期でも表示できますが、画像はデフォルト図のみ表示されます.非同期イベントが早期にトリガーされたかどうかを確認し(ピクチャロードは非同期イベントであり、クライアントが事前に図をダウンロードしてからネイティブアドレスを渡してくれた)、ローカルピクチャがクリアされたかどうかを確認した後、appをchromeに接続してデバッグしたところ、幅が0に設定されていることがわかりました.この0のソースはMath.min( , )
です.(なぜ幅100%を設定しないのですか?これはもう一つの穴にかかわっています.Androidの携帯電話の画面解像度に問題があります.例えば、最大スクリーン幅3600%の幅が720です.彼は2倍のスクリーンですから...いつもこのような奇抜な携帯電話の存在があります).解決策:(1)クライアントはwebView.onResume
を検出してからすべての非同期イベントを実行する(少しの遅延が必要).Webビューがフォーカスを取得したと考えられているためかもしれませんが、実際には完全に切り替えられていません.このときすぐにwindow.innerWidth
を呼び出して得られる投げは0になります.もちろん万能の遅延数十ミリ秒を用いてトリガすることができるが,この方法には根本的な治療ができず,放棄するものがあると考えられる.(2)クライアント転送画面幅.それ自体に非同期イベントがある以上、私たち自身が取得できないときは、クライアントを使って転送すればいいです.なお、フロントエンドのpx単位は、クライアントに対応するdpi、すなわち3倍のスクリーンであり、フロントエンド取得スクリーン幅は360 pxであり、クライアントが取得するのは1080 pxであり、対応するdpiは360である.dom.style.cssText += ';transform:translate3D(0,0,0);-webkit-transform:translate3D(0,0,0);';
はアンドロイドの一部機種では(既知のvivoがあります)、動的書き込み後は前者のtransform:translate3D(0,0,0)
のみが変更され、-webkit-transform:translate3D(0,0,0);
は値付けされず、アニメーションエラーが発生します.解決策:アンドロイドが-webkit-
の属性loadUrl
メソッドを使用して直接jsを実行する場合、アンドロイド4.4の後、loadUrlの方式でjsが呼び出され、自動的にdecodeが行われる.