2017-08-04 1 views
1

私はコードから_Layout.cshtmlにカスタムスクリプトを挿入する方法を探しています。 _Layout.cshtmlはそれについて何も知ることができません。ちょうどBrowser Linkのように。カスタムスクリプトを実行時にページ本体にプログラムで挿入する - ブラウザリンクのように

あなたは、単純な書き込みこの:

app.UseBrowserLink(); 

そして、これは実行時に体内に注入します。

<!-- Visual Studio Browser Link --> 
    <script type="application/json" id="__browserLink_initializationData"> 
     {"requestId":"a717d5a07c1741949a7cefd6fa2bad08","requestMappingFromServer":false} 
    </script> 
    <script type="text/javascript" src="http://localhost:54139/b6e36e429d034f578ebccd6a79bf19bf/browserLink" async="async"></script> 
    <!-- End Browser Link --> 
</body> 

_Layout.cshtmlにはその兆候はありません。 残念ながら、ブラウザリンクはオープンソースではありませんので、実装された方法はわかりません。 Browser Link source now available

私はそれがどのように行われたのだろうと思っていましたか?

答えて

0

Razorではこれを非常に簡単に行うことができます。フラグを使用することもできます。

例:お使いのコントローラで

:あなたのビュー(.cshtml)で

ViewData["RegisterCustomCode"] = "true"; 

@if (ViewData["RegisterCustomCode"] == "true") 
{ 
    <text> 
     <script src="..."></script> 
    </text> 
} 
+0

しかし、これは、ビューがそれを知っていることを意味し、それは契約の破棄者です。 –

+0

質問の範囲を誤解していると思います。私は、コードリンクのようなブラウザリンクがコアで可能であるかどうかは不明です。しかし、それは面白い質問です。 +1 – Terrance00

1

それはオープンソースではないのですが、あなたは簡単にそれを逆コンパイルすることができますどのように動作するかを見てください。 ソースコードのコメントから:

このストリーム実装はパススルーフィルタです。 HTMLコンテンツの最後にBrowser Link接続スクリプトへのリンクを追加するのが仕事です。実際のフィルタリング作業が行われるホストへの接続を使用してこれを行います。ホスト接続に何か問題が生じた場合や、書き込まれるコンテンツが実際にHTMLでない場合、フィルタはパススルーモードに入り、すべてのコンテンツを出力ストリームにそのまま返します。

全体がかなり関わっているようですが、すぐに使用できないものは使用されていないようですので、同様のことをコード化することは可能でしょう。

+0

これはおそらくかなりのオーバーヘッドを追加するので、私はこれを実稼働環境では使用しないと付け加えます。 –

+0

それは開発のために意味があるので、うまくいくはずです:) –

関連する問題