0

<script>HEAD自体が完全にロードされる前に、HEADの要素をappendChildできますか?

例:

<head>
<script src="my.js">
//etc

そこにmy.jsあります:

var thescript = document.createElement('script');
thescript.setAttribute('type','text/javascript');
thescript.setAttribute('src','otherfile.js');
document.getElementsByTagName('head')[0].appendChild(thescript);

このコードは、ブラウザが到達する前に実行されます</head>

これは安全ですか、それとも問題を引き起こす可能性がありますか?.jsスクリプトからjqueryをロードしたいので、これを実行したいので、ページを編集して他のページを<script>手動で追加する必要はありません。

どうもありがとう

4

3 に答える 3

0

ヘッドエレメントは、完全にロードされるまで使用できません。ただし、別のアプローチを使用できます。

「includes.js」と呼ばれるファイルを1つだけインクルードします。次のようになります。

function include_once(src) {
  // get script elements already in the HTML source code,
  // abort if script has been loaded
  var scripts = document.getElementsByTagName('script');
  if ( scripts ) {
    for ( var k=0; k < scripts.length; k++) {
      if ( scripts[k].src == src ) return; 
    }
  }
  // include if not already loaded
  var script = document.createElement('script');
  script.src = src;
  script.type = 'text/javascript';
  (document.getElementsByTagName('head')[0] || document.body).appendChild(script);
}

// add all your scripts here
function addIncludes () {
    include_once ( 'js/my.js' );
}

次に、addIncludesonloadを呼び出します。

<body onload="addIncludes()">

(この例は、ドイツのサイトから取得および変更されています。)

ロード直後に実行する必要があるJSがある場合は、間隔を設定し、追加の.jsファイルの可用性をテストする必要があります。元のページが完了した後にロードされることを忘れないでください。

于 2011-03-19T00:01:52.357 に答える
0

これは、Google Analyticsの非同期トラッキングコードが行うこととほぼ同じであり、通常は問題が発生しません。GAと同様の手法を使用すると、次のようになります。

(function() {
   var thescript = document.createElement('script');
   thescript.type = 'text/javascript';
   thescript.src = 'otherfile.js';
   var s = document.getElementsByTagName('script')[0]; 
   s.parentNode.insertBefore(thescript, s);
})();

ただし、「otherfile.js」内のコードはすぐには利用できない可能性があるため、それを考慮する必要があることに注意してください。GAは、スクリプトが使用可能になると実行される関数呼び出しを追加できるキューを使用します。

于 2011-03-18T23:59:56.973 に答える
0

通常、ページの読み込みのこの時点でDOMを変更することは安全ではありませんが、document.writeln('<script language = "javascript" src = "otherfile.js" />'); 大丈夫なはずです。

于 2011-03-19T04:07:51.773 に答える