1

問題は単純ですが、解決策を見つけることができません。助けてくれた人たちに感謝します。画面に表示される前にWebページ(DOMツリー)を変更したい。DOMツリーが処理される前にメモリに完全にロードされていることを理解しています。

この完全にロードされたDOMツリーをメモリ上で処理し、新しい構造で表示させる方法を知っている人はいますか?

私がそれをしたい理由は、私が既存のウェブサイトにコンテンツを追加しているアドオンに取り組んでいるからです。

追加->既存のWebサイトは私のものではないので、phpを使用してWebサイトのコンテンツを変更することはできません。

しかし、現在、Webサイトはアドオンコンテンツなしで表示されており、1秒後にコンテンツが表示されるため(Webサイトが既に表示された後にコンテンツを追加するため)、Webサイトのコンテンツが移動していることがわかります。

助けてくれてありがとう。

4

4 に答える 4

4

それほど難しいことではありません。CSS を使用して本文を非表示にし、ドキュメントの onload イベントで操作を行い、本文を表示します。

短い例:

<html>
<head>
<title>example</title>
<style type="text/css">
<!--
html.scripted body{display:none;}
-->
</style>
<script type="text/javascript">
<!--
//set class for html-element, so the css-rule above will be applied to the body
document.getElementsByTagName('html')[0].className='scripted';

//on page load
window.onload=function()
{
  //do the manipulation
  document.body.appendChild(document.createElement('em')).appendChild(document.createTextNode('dynamic content'));
  alert('manipulation done');

  //show the body
  document.body.style.display='block';
}
//-->
</script>
</head>
<body>
static content
</body>
</html>

以下のブラッドのコメントに関しては、他の方法があるかどうかを検討してください。本当の問題は移動するコンテンツにあるように思われるため、動的コンテンツが後で表示される場所に静的なプレースホルダーを配置できる可能性があります。

于 2010-11-15T16:44:27.697 に答える
1

タグで PHP に言及しているなら、ドキュメント サーバーサイドをビルドしてみませんか? それなら、構いません。

このクライアント側で行う必要がある場合は、これについても心配する必要はありません。いずれにせよ、Web ページはプログレッシブにレンダリングされます。高速なコンピューターとサーバーへの高速接続を使用しているかもしれませんが、ほとんどのユーザーはそうではないことを保証します。

DOM がページを強化する準備ができているビットにコードを追加するだけです。関連: フレームワーク全体なしで Javascript DOM 対応

于 2010-11-15T16:45:46.647 に答える
0

私はついに解決策を見つけました。

Webページのナビゲーションを見てアドオンを作成します。実際、URLの変更を調べて、ユーザーが別の場所に移動していることを確認します(したがって、Webページの「Load」イベントを取得する前に何かを行う必要があることがわかります)。

次に、ループを使用して要素(ヘッダーなどのDOMにあることがわかっている)にアクセスしようとします。次に、要素が表示されたら('Load'イベントの前)、コードを挿入してループ/リスニングを停止します。

誰かがそれがすべてどのように行われるかについての詳細が必要な場合、私はあなたの質問に喜んで答えます。

ありがとう。

于 2011-05-18T14:56:25.333 に答える
0

ロードされる前に DOM を操作する唯一の方法は、php のようなプリプロセッサを使用することです。

Javascript は、DOM がロードされた後にのみ操作できます。

それ以上のヘルプについては、より具体的な例を提供する必要があります:-)

于 2010-11-15T16:45:08.353 に答える