1

知っている

「オンロードは、DOM が完全にロードされたときに実行されます。これは、ページの終了後に実行されることを意味します。これは、ドキュメントが完全にロードされたときに何らかのタスクを実行する場合に役立ちます。」

しかし、これらのコードが chrome で機能しない理由 (spBodyOnLoadWrapper は "init.debug.js" で定義された関数であり、この関数は呼び出されませんでした):

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns:o="urn:schemas-microsoft-com:office:office" lang="en-us" dir="ltr">
    <head>
   <script type="text/javascript">
    document.write('<script type="text/javascript" src="/_layouts/1033/init.debug.js?rev=Cn3X2qRiBI8U52EFeStGwg%3D%3D"></' + 'script>');
     </script>
    </head> 
    <body scroll="no" onload="if (typeof(_spBodyOnLoadWrapper) != 'undefined') _spBodyOnLoadWrapper();" class="v4master">
    </body>

これらの HTML は、「SharePoint 2010」という名前の Microsoft 製品によって生成されたもので、「ベスト プラクティス」ではなく、醜いものですが、Chrome で動作させる必要があります...

4

6 に答える 6

5

document.write()scriptは JavaScript コードであるため、要素内に含める必要があります。

于 2013-08-27T07:23:50.317 に答える
2

あなたの HTML にはいくつかの間違いや悪い習慣が見られます。

まず、document.writeステートメントをscriptタグでラップする必要があります。

第二に、使用document.writeする必要はありません (悪い習慣と見なす必要があります)。scriptタグをheadまたはに配置することで、ページにスクリプトを簡単に追加できますbody

<script type="text/javascript" src="/_layouts/1033/init.debug.jsrev=Cn3X2qRiBI8U52EFeStGwg%3D%3D"></script>

スクリプト ソースを動的に指定する場合は、script要素を作成し、そのソースを設定してドキュメントに追加できます。

<script type="text/javascript">
    var headElement = document.getElementsByTagName('head')[0],
        script = document.createElement('script');
    script.setAttribute('src', '/_layouts/1033/init.debug.jsrev=Cn3X2qRiBI8U52EFeStGwg%3D%3D');
    script.setAttribute('type', 'text/javascript');
    headElement.appendChild(script);
</script>

属性を使用する代わりに、JavaScript でイベントonloadの EventListener を追加することをお勧めします。load

window.addEventListener('load', function () {
    if (typeof(_spBodyOnLoadWrapper) != 'undefined') {
        _spBodyOnLoadWrapper();
    }
});
于 2013-08-27T07:30:42.773 に答える
0

次のスクリプトを使用することをお勧めします。

window.onload = function() {
    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.onreadystatechange = function () {
        if(this.readyState == 'complete') {
            if (typeof(_spBodyOnLoadWrapper) != 'undefined') {
                        _spBodyOnLoadWrapper();
                    }
        }
    }
    script.src = '/_layouts/1033/init.debug.js?rev=Cn3X2qRiBI8U52EFeStGwg%3D%3D';
    head.appendChild(script);
}

document.write の使用はお勧めできません。上記のコードは、現在のページのヘッダーに新しいスクリプト タグを動的に追加します。このスクリプトがロードされたことを検出し、関数を実行します。

于 2013-08-27T07:23:53.297 に答える
0

この問題に遭遇し、ここで提案されている解決策を試しましたが、うまくいきませんでした。さらに検索すると、これは Chrome のバグであり、少なくとも 2009 年にさかのぼるようです。

http://productforums.google.com/forum/#!topic/chrome/7VIpByhmU3U

問題は、web ページが完全に読み込まれる前にbody.onload (および window.onload) が起動していることです。これは明らかに、私の場合、読み込み時間がネット トラフィックによって異なる大きな画像を読み込んでいるためです。回避策は、参照されている HTML の、終了タグの前に JavaScript をページに配置することです。

<script type="text/javascript">
     if (typeof(_spBodyOnLoadWrapper) != 'undefined') _spBodyOnLoadWrapper();
</script>

これは、バグが発生しない他のブラウザー (Firefox、Safari) で、ページ コンテンツの大幅に迅速な更新を生成するという効果もありました。

于 2013-12-04T06:13:14.040 に答える
0

スクリプトタグを頭に入れずにdocument.write. 次に、実行したいコードを別の関数と head セクションに配置することをお勧めしますが、以下の例でもうまくいく可能性があります ( JS Binも参照)。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns:o="urn:schemas-microsoft-com:office:office" lang="en-us" dir="ltr">
<head>
<script type="text/javascript" src="/_layouts/1033/init.debug.js?rev=Cn3X2qRiBI8U52EFeStGwg%3D%3D"></script>
</head>

  <body scroll="no" onload="javascript:if (typeof(_spBodyOnLoadWrapper) != 'undefined'){ _spBodyOnLoadWrapper();}" class="v4master">
</body>
于 2013-08-27T07:29:31.060 に答える