質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

545閲覧

EsModules は HTMLImports の代わりになるのか

lazex

総合スコア604

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1グッド

2クリップ

投稿2018/04/12 16:06

WebComponents を作るときに当たり前のように

  • ShadowDOM
  • CustomElement
  • TemplateTag
  • HTMLImports

を使っていたのですが、今日偶然 HTMLImports は廃止予定というのを見つけて衝撃を受けました。
Chrome はすでに実装しているのに Mozilla が嫌がったそうですね。

JavaScript ではなく HTML をインポートできるという発想はとても良い発明だと思います。

html

1<template id="template"> 2 <div> 3 <div id="name"></div> 4 <div id="address"></div> 5 </div> 6</template> 7 8<script> 9 customElements.deifne("user-info", class Extends HTMLElement { 10 constructor(){ 11 super() 12 this.attachShadow({mode:"open"}).append( 13 document.getElementById("template").content.cloneNode(true) 14 ) 15 } 16 }) 17</script>

という風に、コンポーネントの HTML 部分となる template タグと動きを定義するスクリプトを 1 つのファイルに書けて、これをインポートするだけでコンポーネントが使えるというのがメリットです。

これを EsModules にするとしても、 EsModules は JavaScript しかインポートできません。
そうなると template タグも使えなくなり、文字列で書くしかなくなります。

js

1const template = ` 2 <div> 3 <div id="name"></div> 4 <div id="address"></div> 5 </div> 6` 7 8 customElements.define("user-info", class extends HTMLElement { 9 constructor(){ 10 super() 11 this.attachShadow({mode:"open"}).innerHTML = template 12 } 13 })

JavaScript 中に文字列で HTML を書くとか昔の JavaScript のようで時代ハズレ感をすごく感じます。
これまでにも文字列で書くのが嫌で、 WebComponents とはいかなくとも、 template タグや script タグのデータブロックを使ってる人は多いと思います。
これでは HTMLImports だけでなく、 template タグのメリットまで捨てているように思います。
tempalte タグでは描画はされませんが解析され DocumentFragement が作られました。
それに対してこの方法では毎回文字列から作ることになるのでパフォーマンスも劣るはずです。
自分で DocumentFragment を作って、クローンするような作りにはできなくはないのですが、わざわざそんなことを自分でしないといけないということです。
あと、 template タグならつかえた script タグを書くことができません。


これまでの Web の新機能をみていると、別にブラウザベンダが作るの面倒だからとかで使いづらい仕様にしたり、すでにある程度あるものを劣化させようとしているとは考えづらいです。

上に書いたような単純に JavaScript で書くのではなく HTMLImports が廃止となるなら相応の別機能が用意されているもしくは策定中なのかと思うのです。
しかし、探してみてもこれといったものは見当たらないです。

HTMLImports なしでもデメリットを感じないような書き方や新機能をご存知でしたら教えてください。

hikaruna👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

defghi1977

2018/04/12 22:14

HTMLImportsはアイディアとしては画期的な機能でしたが, リソースの読み込み順序の判定(インポートがインポートを呼ぶ構成)において不透明な部分も多く, 将来的なWEB仕様の拡張に際して禍根を残す恐れが有ったため, 仕様としてリジェクトされたのも致し方なしとは感じています. (初期のShadow DOMも酷い内容でしたから, その実装に手こずったMozillaが”切れた”のかもしれません)
lazex

2018/04/14 00:12

そうなのですか。私は現Chromeに実装されているものでインポート中にインポートする時のう動きも気に入ってるのですけど。(同じパスのものは最初の1度のみのインポートで、スクリプトは同期的に実行される)
defghi1977

2018/04/14 00:21

いかんせん, Web Componentsの初稿を手がけた方の頭が「良すぎて」無駄に高機能・複雑化してしまった反省から, ある時期より急激に(作る方にも使う方にも)シンプルで判りやすい方向に舵が切られたように感じます.
guest

回答1

0

HTML標準のみでということでなければ、Vue.jsが似たようなことできると思います

投稿2018/04/12 21:05

euledge

総合スコア2404

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lazex

2018/04/14 00:14

ありがとうございます。ですが、標準のものでお願いしたいです。 ライブラリ・framework使えば解決できるから機能は不要、と言ってしまえば最近追加されたjQuery由来のDOMAPIのreplaceWithとかclosestとかも標準にはいらないよね、と言えてしまいますし
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問