3

以下のスクリプトでは、jQuery.js が defer 属性に含まれている限り、"Uncaught ReferenceError: jQuery is not defined" エラーが発生します。jQuery オブジェクトを呼び出しているインライン スクリプトも延期されても違いはありません。

ページのレンダリングを高速化するために、スクリプトを延期しようとしています。

このようなエラーなしでjQueryを延期することは可能ですか?

Uncaught ReferenceError: jQuery が定義されていません

<!DOCTYPE html>
<html lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>jQuery defer test</title>
<link rel="stylesheet" href="styles.css" media="screen" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0" />
<!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
</head>
<body>
    <p>content goes here...</p>
    <script type='text/javascript' src='scripts.jquery.js' defer='defer'></script>
    <script defer='defer'>
    jQuery(document).ready(function(){
        alert('deferred');
        });
    </script>
</body>
</html>
4

2 に答える 2

2

defer 属性は、外部スクリプトにのみ影響します。したがって、インライン JavaScript は常に外部 jQuery リソースの前に実行されます。

http://www.w3.org/html/wg/drafts/html/master/scripting-1.html#attr-script-deferから

The defer and async attributes must not be specified if the src attribute is not present.

残念ながら、ほとんどのサイトでは、jQuery(function() {})DOM の準備が整った後に init にアクセスする必要があるため、ほとんどの場合、ヘッドに jQuery をロードする必要があります。これは、外部の Google CDN から jQuery を提供する主な理由の 1 つです。jQuery はユーザーによって (別のサイトから) 既にキャッシュされている可能性があり、独自の Web サーバーよりも配信時間がはるかに短い可能性が高いからです。

jQueryこれを回避するには、DOM 対応関数を格納するためだけに独自の一時オブジェクトを登録するなど、いくつかの方法がありますが、欠点があります。

于 2013-06-21T18:20:55.717 に答える
0

使用できますdeferが、外部スクリプトにのみ使用できます!

于 2013-06-21T18:25:34.050 に答える