jQueryまたは通常のJavaScriptを使用してWebアプリケーションを開発する場合は、まず機能の可用性をチェックすることが一般的です。私はdocument.oncopy
イベントを使用したい場合、たとえば、私が最初に私のコードは低いブラウザでは壊れないことを確認するために、このような何かを持っている必要がありますので:角度ユニバーサルとブラウザの機能チェック
if ("oncopy" in document) {
// Feature is available
}
私はこれがどのように動作するかについて少し困惑していますAngular2で表します。私はブラウザでのみ実行することを期待しても私はまだ同じを使用することができますが、私はアンギュラユニバーサルを使用し、代わりにテンプレートやDomRendererに依存する場合は、DOMを一人で残すように言われています。これにより、ページがサーバー上で事前レンダリングされ、本当に印象的なパフォーマンスが向上します。
しかし、document.oncopy
が利用できない場合、特定のdivを非表示にしたいとします。
<div *ngIf="hasFeature()">...</div>
と
hasFeature() {
return 'oncopy' in document;
}
その後、私はまだDOMを操作していますので:私の理解では、これは推奨されないということです。私の例はdocument.oncopy
についてですが、私は普遍的なサポートを持っていない機能を選ぶことができます。
私はスコッチのChris Nwamba's tutorialを使用して、これをテストし、彼のホームテンプレートの最後に次を追加しました:
<div *ngIf="hasFeature()">Feature is supported</div>
<div *ngIf="!hasFeature()">Feature is NOT supported</div>
更新:を興味深いことに、それは異なるブラウザで異なる結果を与えました。 Chrome 55では、通常と同じように実行され、「機能がサポートされています」というメッセージが表示されました。 IE11では、「サポートされていません」というメッセージが届きました。どちらの場合も、サーバログにはEXCEPTION: document is not defined
というメッセージが表示されますが、ページはまだ完全に大丈夫です。
したがって、アンギュラユニバーサルを使用する場合、ブラウザの機能を確認する正しい方法は何ですか?
アップデート:私は、テンプレート内のフィールドを使用してlife cycle hooksのいずれかからそのフィールドを割り当てることで周りのおもちゃ 。 ngAfterContentInit
は素晴らしい候補のようですが、サーバーでもエラーが発生します。まだブラウザでうまく動いていて、奇妙な効果はありません(私がこれまで気づいたこと)。