ネストされたフレームとiframeの数が異なるWebアプリケーションに取り組んでいます。現在、Webページがレンダリングされると、ブラウザはそれらに対してスクロールバーをレンダリングします。時々カウントは非常に醜いページの4-5スクロールバーです。そこで、Javascriptを使用してこれらのスクロールバーを削除したいと思います。
問題を理解するには、以下のフレーム/iframe階層のWebページの例を参照してください。
Frame1
--Frame2
--Frame3
--Frame4
--Frame5
私のアプローチ: ルートドキュメントから開始し、ページからすべてのフレーム/ iframeを検索し、これらのフレームノードをレベルと呼ばれる追加の変数を使用して配列に配置します。これが完了した後、私はレベルで配列をソートしています。したがって、このアクティビティの後、配列は次のようになります。
0> Frame5 node, level=3
1> Frame4 node, level=3
2> Frame3 node, level=2
3> Frame2 node, level=2
4> Frame1 node, level=1
この後、スクロールバーを削除する2つのオプションを検討しています
オプション#1:配列の0番目の要素から開始し、フレームのscrollheightを取得して、Frameのheightプロパティに設定します。
var frameScrollHeight=Frame5.contentWindow.document.body.scrollHeight;
Frame5.style.height =frameScrollHeight;
配列内のすべてのフレームに対して同じ手順を実行します。ここでの私の仮定は、最も内側のフレームの高さが変更された場合、その親ノードのスクロールの高さを真のスクロールの高さに変更する必要があるということです。たとえば、Frame5とFrame4の高さを設定した後。Frame3のscrollheightをフェッチするときは、Frmae5 height +Frame4heightである必要があります。しかし、今では真のスクロール高さを反映していません。ここで何が悪いのかわかりません。フレーム5とフレーム4の高さを設定すると、Domはすぐに更新されますか?。間違ったプロパティを使用していますか?clientHeight、offsetHeightなどのスクリプトデバッガーを使用して他のすべてのプロパティを検証しましたが、Frame5 height +Frame4heightに相当するものはありませんでした。
オプション#2 上記のアプローチが正しく機能しないため、前のレベルのフレームの高さを手動で追加して、次のレベルの親ノードに設定するという別のアプローチを採用しました。たとえば、Frame5とFrame4のscrollheightを取得し、Frame3に設定します。Frame3とFrame2の高さも追加し、Frame1に設定します。
オプション2は現在機能していますが、すべてのフレームが階層的な順序である必要があり、互いに並列であってはならないなど、いくつかの欠点があります。
また、scrollheightを高さとしてFrameに設定すると、スクロールバーはそのまま表示され、scrollheightに15などの定数を追加する必要があります。したがって、実際のコードは次のようになります
var frameScrollHeight=Frame5.contentWindow.document.body.scrollHeight+15;
Frame5.style.height =frameScrollHeight;
この15が何であるかわかりません。フレームボーダーですか?フレームの任意のプロパティを使用してこの定数を取得できますか?
私はオプション1を好みますが、なぜこれが機能しないのかわかりません。この問題を解決する他の方法がある場合は、提案してください。