Mvcの完全な非同期スクリプトの読み込み

PetrTomášek

Webページでの非同期読み込みスクリプトに小さな問題があります。ページのすべてのスクリプトを非同期でロードする必要があります。私はグーグルで見つけた多くの手順を試しましたが、それでも完璧ではありません。

今私はこのようにそれを持っています:

  1. すべてのスクリプトをレイアウトからjqueryを含む1つのバンドルに分割します。
  2. ページの下部で、asyncタグを使用してRenderFormatを呼び出します。
  3. ここで問題が発生します。スクリプトが@RenderFormatによってレンダリングされている状況を解決する必要があります。問題は、これらのスクリプトが必要以上に早くレンダリングされていることです。

たとえば、私はこれをホーム/インデックスファイルに持っています:

@Scripts.RenderFormat("<script async type=\"text/javascript\" src=\"{0}\"></script>", "~/bundles/raphael")

または単に

...
$(".datapicker").datapicker();
...

ここでは、jqueryがまだロードされていないため、「$が定義されていません」というエラーが発生します

コンテンツの後、レイアウトファイルには次のものがあります。

...
@Scripts.RenderFormat("<script async type=\"text/javascript\" src=\"{0}\"></script>", "~/bundles/frontall")
...
@RenderSection("scripts", required: false)

ページ上のすべてのスクリプトを1つのバンドルにまとめると、すべて問題ありませんが、スクリプトをレンダリングしたくないので、特定のセクションでのみ実行する必要があります。

次のアイデアは、次のような操作を行うカスタムRenderSectionメソッドを作成することでした。

    function async(u, c) {
    var d = document, t = 'script',
        o = d.createElement(t),
        s = d.getElementsByTagName(t)[0];
    o.src = u;
    if (c) { o.addEventListener('load', function (e) { c(null, e); }, false); }
    s.parentNode.appendChild(o, s);
}

async("/bundles/jquery", function() {
    //here, load scripts from inner pages. Index, Detail...
});

それを解決する方法はありますか?どうもありがとうございました。

PetrTomášek

わかった、解決した。

レイアウトに私の現在のスクリプトがあります:

...

 @RenderSection("scripts", required: false)

    <script>

    function async(u, c, css) {
        var t = 'script';
        var element = document.createElement(t);
        var s = document.getElementsByTagName(t)[0];
        element.src = u;

        if (css) {
            t = "link";
            element = document.createElement(t);
            element.href = u;
            element.rel = 'stylesheet';
            element.src = null;
            var head = document.getElementsByTagName('head')[0];
            head.appendChild(element, head);

            return;
        }

        if (c) { element.addEventListener('load', function (e) { c(null, e); }, false); }
        s.parentNode.appendChild(element, s);
    }

    function initScripts() {
        async("/content/css", null, true);
        async("/bundles/jquery", function () {
            @RenderSection("asyncScripts", required: false)
        });
    }

    if (window.addEventListener) {
        window.addEventListener("load", function () {
            initScripts();
        }, false);
    }
    else if (window.attachEvent) {
        window.attachEvent("onload", function () {
            initScripts();
        });
    } else {
        window.onload = function () {
            initScripts();
        };
    }

</script>

そして他のファイルで。(インデックス、詳細...)

@section scripts {
   <script type="text/javascript">
    var czech_republic = {};
    window.selectedRegions = [];

    czech_republic.regions = {
        @Html.Raw(string.Join(", ", regions.Select(r => string.Format("\"{0}\": \"{1}\"", r.RaphaelId, r.RaphaelCoordinates))))
    };

</script>
@section asyncScripts {
    @Scripts.RenderFormat("async(\"{0}\");", "~/bundles/raphael");
}

たとえば、raphaelの後で、次のスクリプトを呼び出す必要がある場合は、renderformat asyncaで新しいコールバックを作成するだけです。

ありがとうございます

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

非同期スクリプトの読み込み

分類Dev

スクリプトDOM要素が非同期読み込みになる理由

分類Dev

GWT同期スクリプトの読み込み

分類Dev

非同期のJavaスクリプトの読み込みでエラーが表示されます

分類Dev

アンドロイドリストビューアダプター非同期タスク画像の読み込み

分類Dev

reactコンポーネント内の非同期読み込みスクリプト

分類Dev

Javascript:ページの読み込みが完了し、スクリプトが非同期を読み込んでいるときに関数を実行します

分類Dev

コンテンツの非同期読み込み用のリストビューの背景色のないProgressView

分類Dev

スクリプトの読み込みの問題-スクリプトの読み込み順序の確認

分類Dev

ドキュメントの書き込みを実行:非同期で読み込まれた外部スクリプトから明示的に開かない限り、ドキュメントに書き込むことはできません。

分類Dev

iOSSwiftのネットワークからのMVVM非同期UIImageの読み込み

分類Dev

AngularJS-アプリ内でのパーツの非同期読み込み

分類Dev

クラスコンストラクターでの非同期データの読み込み

分類Dev

JasmineとThree.jsのジオメトリの非同期読み込み

分類Dev

IEの非同期Googleマップ読み込みのバグ

分類Dev

Javascriptの自動読み込み画像スクリプトが機能しない

分類Dev

シームレスな非同期シーンとテクスチャの読み込み-Unity&GearVR

分類Dev

AndroidListViewウィジェットの非同期画像の読み込み

分類Dev

スクリプトの読み込みが遅すぎます

分類Dev

ElasticsearchGroovyスクリプトの読み込みエラー

分類Dev

vueスクリプトの遅延読み込み

分類Dev

Facebook ピクセル非同期の読み込み

分類Dev

Emberコンポーネントでの非同期読み込み

分類Dev

Paramiko:「select」を使用した長いシェルスクリプト出力の非同期読み取り

分類Dev

スクリプトが読み込まれない:JSONでのAngularJSの使用(Firebase)

分類Dev

スクリプトが読み込まれない:JSONでのAngularJSの使用(Firebase)

分類Dev

ページの読み込み後にスクリプトを読み込みますか?

分類Dev

非同期タスクで電話の連絡先を読み込む

分類Dev

次の条件でスクリプトが読み込まれない

Related 関連記事

  1. 1

    非同期スクリプトの読み込み

  2. 2

    スクリプトDOM要素が非同期読み込みになる理由

  3. 3

    GWT同期スクリプトの読み込み

  4. 4

    非同期のJavaスクリプトの読み込みでエラーが表示されます

  5. 5

    アンドロイドリストビューアダプター非同期タスク画像の読み込み

  6. 6

    reactコンポーネント内の非同期読み込みスクリプト

  7. 7

    Javascript:ページの読み込みが完了し、スクリプトが非同期を読み込んでいるときに関数を実行します

  8. 8

    コンテンツの非同期読み込み用のリストビューの背景色のないProgressView

  9. 9

    スクリプトの読み込みの問題-スクリプトの読み込み順序の確認

  10. 10

    ドキュメントの書き込みを実行:非同期で読み込まれた外部スクリプトから明示的に開かない限り、ドキュメントに書き込むことはできません。

  11. 11

    iOSSwiftのネットワークからのMVVM非同期UIImageの読み込み

  12. 12

    AngularJS-アプリ内でのパーツの非同期読み込み

  13. 13

    クラスコンストラクターでの非同期データの読み込み

  14. 14

    JasmineとThree.jsのジオメトリの非同期読み込み

  15. 15

    IEの非同期Googleマップ読み込みのバグ

  16. 16

    Javascriptの自動読み込み画像スクリプトが機能しない

  17. 17

    シームレスな非同期シーンとテクスチャの読み込み-Unity&GearVR

  18. 18

    AndroidListViewウィジェットの非同期画像の読み込み

  19. 19

    スクリプトの読み込みが遅すぎます

  20. 20

    ElasticsearchGroovyスクリプトの読み込みエラー

  21. 21

    vueスクリプトの遅延読み込み

  22. 22

    Facebook ピクセル非同期の読み込み

  23. 23

    Emberコンポーネントでの非同期読み込み

  24. 24

    Paramiko:「select」を使用した長いシェルスクリプト出力の非同期読み取り

  25. 25

    スクリプトが読み込まれない:JSONでのAngularJSの使用(Firebase)

  26. 26

    スクリプトが読み込まれない:JSONでのAngularJSの使用(Firebase)

  27. 27

    ページの読み込み後にスクリプトを読み込みますか?

  28. 28

    非同期タスクで電話の連絡先を読み込む

  29. 29

    次の条件でスクリプトが読み込まれない

ホットタグ

アーカイブ