自己終了スクリプト要素が機能しないのはなぜですか?


1346

ブラウザが正しく認識しない理由は何ですか:

<script src="foobar.js" /> <!-- self-closing script element -->

これだけが認識されます:

<script src="foobar.js"></script>

これはXHTMLサポートの概念を壊しますか?

注:この説明は、少なくともすべてのIE(6-8ベータ2)について正しいものです。


12
ChromeとOperaで機能
corymathews 2008

46
最近の一部のバージョンのChromeでは、これが壊れているようです。自動終了のスクリプトタグがChromeで機能しなくなりました
Adam Ness、

13
それは単なるスクリプトタグではありません。自己終了のdivタグも機能しないと思います。
DOK

6
2011年7月現在、ChromeとFirefoxにこの問題があります。「それはバグではなく、機能です」-本当に迷惑です。
Martin Konicek、2011

4
こののより一般的なバージョンは、2日後に頼まれた:stackoverflow.com/questions/97522/...を
チロSantilliを冠状病毒审查六四事件法轮功

回答:


481

XHTML 1仕様では、

С.3。要素の最小化と空の要素コンテンツ

コンテンツモデルではない要素の空のインスタンスEMPTY(たとえば、空のタイトルまたは段落)を指定すると、最小化されたフォーム(たとえば、use <p> </p>とnot <p />)を使用しません。

XHTML DTDは、スクリプト要素を次のように指定します。

<!-- script statements, which may include CDATA sections -->
<!ELEMENT script (#PCDATA)>

111
それでも、「してはいけない」は「してはいけない」と同じではありません。これは、ガイドラインではなく(セクションタイトルで提案されている互換性のため)、ルールではありません。
Konrad Rudolph、

42
実際、私はこの制限の用途を見つけることができません:)それは完全に人工的なようです。
スクワッド2008

22
正しい答えはオラフによって与えられました。XHTML 1.0の付録Cは、物事が現状のままである理由ではありません。物事の方法を回避する方法にすぎません。
hsivonen 2008年

32
これは仕様の標準的な部分ではありません。XHTMLをサポートし
Kornel

12
の問題<script />は、仕様で許可されていないことではありませんが、コンテンツタイプがapplication / xhtml + xmlでない場合、ブラウザはそれを「non-tag-soup」と解釈しません。参照:stackoverflow.com/questions/348736/…@shabunc :ブラウザーはそれを理解しているように見えるかもしれません、実際に起こっているのは、スクワッドの引用を解釈するために、段落内の <p />の後にコンテンツを配置しています。 p>は空ではないため、自己終了できません。XHTML 1.1では、自己終了することできます。
ジョー

241

ブラッドとスクワッドが言ったことに追加するには、自己終了XML構文は<script />実際に正しいXMLですが、実際に機能させるに、Webサーバーもapplication/xhtml+xmlHTTPのようなXML MIMEタイプで適切に形成されたXMLとしてドキュメントを送信する必要がありますContent-Typeヘッダー(としてではなくtext/html)。

ただし、XML MIMEタイプを送信すると、IE7でページが解析されなくなりますtext/html

w3から:

要約すると、「application / xhtml + xml」はXHTMLファミリドキュメントに使用する必要があり(SHOULD)、「text / html」の使用はHTML互換のXHTML 1.0ドキュメントに限定する必要があります(SHOULD)。「application / xml」と「text / xml」も使用できますが、適切な場合は、これらの汎用XMLメディアタイプではなく「application / xhtml + xml」を使用する必要があります。

私はこれを数か月前に戸惑いました、そして唯一の実行可能な(FF3 +およびIE7と互換性のある)解決策は、古い<script></script>構文を使用することでした。text/html(HTML構文+ HTML mimetype)で。

サーバーtext/htmlがHTTPヘッダーでタイプを送信すると、適切に形成されたXHTMLドキュメントであっても、FF3 +はHTMLレンダリングモードを使用します。<script />ないます(これは変更であり、Firefoxは以前はそれほど厳密はありませんでした)

これはhttp-equiv、ドキュメント内のメタ要素、XMLプロローグまたはdoctypeのいじりに関係なく発生します。Firefoxがtext/htmlヘッダーを取得すると分岐し、HTMLまたはXMLパーサーがドキュメント内を調べ、HTMLパーサーがを理解しません<script />


3
IE7のサポートを中止した場合、text / xmlを送信すると、<script />の幅広いブラウザーサポートが得られると結論付けるのは正しいことですか?
Chris Moschini、2013

7
したがって、要するに、<script />は、ページのMIMEタイプがxhtml / xmlである場合にのみ機能します。通常のtext / htmlページの場合、機能しません。また、「xhtml / xml」MIMEタイプを使用しようとすると、IEの互換性が損なわれます。まとめると、落ち着いて<script> ... </ script>を使用してください。ありがとうJoe ;-)
Navin Israni

1
素晴らしい説明。注目に値するもう1つの点は.html、同様の理由で、メタタグに関係なく、Firefoxでもローカルファイルがタグスープとしてレンダリングされることです。XHTMLファイルの場合、Firefoxは名前が付けられている場合にのみそれに応じてレンダリングします.xhtml
alecov

@ChrisMoschini。おそらく、しかし使用しapplication/xhtml+xml、ではありませんtext/xml
TRiG

167

誰かが気になる場合は、究極の理由は、HTMLがもともとSGMLの方言だったということです。これはXMLの奇妙な兄です。SGMLランドでは、要素をDTDで自己終了(例:BR、HR、INPUT)、暗黙的に終了(例:P、LI、TD)、または明示的に終了(例:TABLE、DIV、SCRIPT)として指定できます。もちろん、XMLにはこの概念はありません。

最近のブラウザーで使用されているタグスープパーサーは、このレガシーから発展しましたが、その解析モデルはもはや純粋なSGMLではありません。そしてもちろん、慎重に作成されたXHTMLは、XML MIMEタイプで送信しない限り、不適切に記述されたSGMLにヒントを得たタグスープとして扱われます。これも理由です...

<p><div>hello</div></p>

...ブラウザによって次のように解釈されます:

<p></p><div>hello</div><p></p>

...これは、DOMに対してコード化しようとするときに適合に陥る可能性のある素敵なあいまいなバグのレシピです。


4
私は興味がある。なぜブラウザはそれをそのように解釈することを選ぶのですか?
Ahmed Aeon Axan 2013年

32
@AhmedAeonAxan:P要素を含めることはできませんDIVブラウザはので、(これは無効なHTMLである)の要素を暗黙的にクローズするP開口部の前に(「暗黙的に閉じることができる」と定義)の要素をDIVタグ。ただし、ブラウザはこの点で異なる動作をする傾向があります(無効なHTMLの場合と同様)。
MrWhite 2013年

5
@ColeJohnsonいいえ、これはタグスープではありません。greimは有効なHTMLと無効なHTMLの境界を混乱させています。タグスープは、ブラウザーがエラー修正を使用するため、作成者がルールを気にしない場合に得られるものです。</p>一方、欠落している終了タグは、実際にはHTMLの定義の一部です。
リスター氏、2015

3
@MrLister-並べ替え。「タグスープ」は、HTMLの作成方法ではなく、HTMLの解析方法を示します。これは、ブラウザがHTMLを理解するために使用するさまざまな戦略を説明するために使用される用語であり、厳密なXML解析とは対照的です。XML解析はXML MIMEタイプに対してのみ許可されますが、それらが広く使用されることはなかったため、ブラウザーはさまざまな「タグスープ」スキームにフォールバックしました。
2015

8
HTML5は実際に「タグスープ」の解析を標準化しました。これには、無効なマークアップを処理する一貫した方法が含まれます。それまでは、ブラウザが無効なマークアップをどう処理するかを考えなければならず、矛盾が生じていました。現在のブラウザーのHTMLパーサーは、これまでに作成されたソフトウェアの中で最も高度なものの1つです。驚くほど高速で、ほとんどすべての入力を処理でき、一貫した結果を生成します。
Stijn de Witt

161

他の人は「方法」に答え、仕様を引用しています。<script/>バグレポートとメーリングリストを何時間も掘り下げた後の、「なぜ駄目なのか」の本当の話です。


HTML 4

HTML 4はSGMLに基づいています。

SGMLはいくつかありshorttagsなどを、<BR//<B>text</><B/text/、または<OL<LI>item</LI</OL>。XMLは最初の形式を取り、末尾を ">"として再定義します(SGMLは柔軟です)<BR/>

ただし、HTMLはredfineしなかったため、<SCRIPT/> 意味するはずです <SCRIPT>>
(はい、 '>'はコンテンツの一部である必要があり、タグはまだ閉じられていません。)

明らかに、これはXHTMLと互換性がなく、多くのサイト壊します(ブラウザがこれを気に するのに十分成熟した頃には)ので、誰もショートタグ実装していませ

事実上、すべての「機能する」自己終了タグは、技術的に非準拠のパーサーで禁止された終了タグを持つタグであり、実際には無効です。このハック思いついたのはW3Cで、XHTMLへの移行を支援しました。 HTML互換に

また、<script>終了タグは禁止されていません

「自己終了」タグはHTML 4のハックであり、意味がありません。


HTML 5

HTML5には5種類のタグがあり、「void」および「foreign」タグのみがが自己終了できますます。

ので<script>、それは(空ではないかもしれませんコンテンツを持っている)と、(MathMLのまたはSVGのような)外国ではありません、<script>関係なく、あなたがそれを使用する方法の、自己クローズすることはできません。

しかし、なぜ?彼らはそれを外国人と見なしたり、特別なケースを作ったりすることはできませんか?

HTML 5は、HTML 4およびXHTML 1の実装との下位互換性を目的としています。これは、SGMLまたはXMLに基づいていません。その構文は主に実装の文書化と統合に関係しています。(これが、HTML4が無効であるにもかかわらず、HTML 5有効な理由などです。)<br/> <hr/>

自己終了<script>は、以前は実装が異なっていたタグの1つです。以前はChrome、SafariOperaで機能していました。私の知る限り、Internet ExplorerやFirefoxでは機能しませんでした。

これは議論された HTML 5が起草されていたし、それがために拒否されてしまったときに壊れる ブラウザの 互換性を。古いブラウザでは、スクリプトタグを自動的に閉じるWebページが(たとえあったとしても)正しく表示されない場合があります。他にも提案はありましたが、互換性の問題も解決できません。

ドラフトがリリースされた後、WebKitはパーサーを準拠するように更新しました。

<script>HTML 4およびXHTML 1との下位互換性があるため、HTML 5では自己終了は発生しません。


XHTML 1 / XHTML 5

ときは本当に XHTMLを務め、<script/>本当にとして、閉じられている他の回答述べました。

仕様が HTMLとして提供されたときに機能するはずであると述べいることを除いて:

XHTMLドキュメント...は、ほとんどのHTMLブラウザと互換性があるため、インターネットメディアタイプ「text / html」[RFC2854]でラベル付けされる場合があります。

どうしたの?

人々はMozillaに、指定されたコンテンツヘッダー(コンテンツスニッフィングと呼ばれる)に関係なく、Firefoxが適合ドキュメントをXHTMLとして解析するように要求しました。これは自己完結型のスクリプトを許可し、Webホスティング業者は適切なヘッダーを提供するのに十分成熟していないため、とにかくコンテンツスニッフィングが必要でした。IEはそれよかった

最初のブラウザ戦争がIE 6で終わらなかった場合、XHTMLもリストに含まれている可能性があります。しかし、それは終わりました。また、IE 6に XHTML に関する問題があります。実際、IE 正しいMIMEタイプをまったくサポートしいませんでした。IEが大きな市場シェアを保持していたため、全員text/htmlXHTML を使用する必要がありました。全体の十年。

また、コンテンツの盗聴 非常に悪い場合があり、人々はそれを止めるべきだと言っています

最後に、W3C がXHTMLを盗聴できることを意味していないことがわかりました。ドキュメントはHTMLとXHTMLの両方であり、Content-Typeルールです。彼らは「私たちの仕様に従うだけ」に固く立ち、何が実用的であったか無視していたと言えます。続く間違い以降のXHTMLバージョンに。

とにかく、この決定はFirefox の問題解決しました。Chrome が誕生する 7年前です。他に重要なブラウザはありませんでした。したがってそれが決定されました。

doctypeだけを指定しても、以下の仕様のため、XML解析はトリガーされません。


1
@AndyE自己終了型の<script>を作成すると、当時の主要ブラウザはそれが閉じられているとは考えず、サブシーケンスhtmlをjavascriptとして解析するため、これらの古いブラウザで有効なHTML5が機能しなくなります。したがって、提案は拒否されます。これは、リンクされたHTML5メーリングリストで説明されています。
Sheepy 2015年

2
@AndyE:あなたが説明しているのは、上位互換性-古いコンパイラーが新しいコンパイラー/インタープリター/パーサーで機能する能力です。下位互換性とは、新しいコードが古いコンパイラ/インタープリタ/パーサーで機能することです。そうです、そうでなければ、下位互換性が問題でした。そうしないと、新しい仕様を念頭に置いて書かれたページが古いブラウザーで機能しないためです(そして、はい、Webプログラミングの伝統により、古いブラウザーで新しいコードをできるだけ機能させるようにしています)。
slebetman

3
@Dmitry現実には、自己クローズスクリプトを許可しないことは一方通行です。リンクされ、自己閉じた<script>が壊れるすべてのブラウザを、ユーザーが単に空白のページが表示されます-ゲーム機、インターネットテレビ、上のIE 11 の新しいコーポレートWin7のPC、何百万ものJavaランタイム、またはスマートフォンの十億。ほとんどのデバイスでほとんどの言語のほとんどのWebViewをアップグレードできますか?HTML5がXHTML2のように失敗したとしよう。
Sheepy

6
非常に過小評価された回答
カミルトムシク

2
多少の修正:HTMLで自己終了として機能しているように見えるタグは、オプションの終了タグを持つタグではなく、禁止された終了タグ(空または空のタグ)を持つタグです。タグのオプションのような終了タグ、<p>または<li>、彼らは以来の自己閉じ'にすることはできませんすることができますようなコードので、コンテンツを持っている<p/>(不正な形式)ということの何物でもありません、それがこの要素で許可されている場合、それは後にタグやコンテンツをスタート、最終的にはその内部になります。
Ilya Streltsyn

44

Internet Explorer 8以前は、XHTML解析をサポートしていません。XML宣言やXHTML Doctypeを使用しても、古いIEはプレーンHTMLとしてドキュメントを解析します。プレーンHTMLでは、自己終了構文はサポートされていません。末尾のスラッシュは無視されます。明示的な終了タグを使用する必要があります。

IE 9以降など、XHTML解析をサポートしているブラウザでも、XMLコンテンツタイプでドキュメントを提供しない限り、ドキュメントをHTMLとして解析します。ただし、その場合、古いIEではドキュメントがまったく表示されません。


9
「IEはXHTML解析をサポートしていません。」これが書かれた当時のIEバージョンには当てはまりましたが、もはや当てはまりません。
EricLaw 2013

@EricLawは、これを修正したIEのバージョンを明確にできますか?(および特定の条件-有効なdoctypeが必要など)
scunliffe 2014

2
@scunliffe IE9は、XHTMLを完全にサポートする最初のバージョンでした。blogs.msdn.com/b/ie/archive/2010/11/01/...
EricLaw

28

上記の人々はすでに問題をほとんど説明しましたが、明らかにするかもしれないことの1つは、人々<br/>がHTMLドキュメントでを常に使用しているにもかかわらず/、そのような位置にあるものは基本的に無視され、 XMLとHTMLの両方で解析可能なもの。<p/>foo</p>たとえば、を試すと、通常の段落が表示されます。


22

自動終了スクリプトタグは機能しません。スクリプトタグにはインラインコードを含めることができ、HTMLは、属性の存在に基づいてその機能をオンまたはオフにするほどスマートではないためです。

一方、HTMLには外部リソースへの参照を含めるための優れたタグがあります。この<link>タグは、自己終了することができます。スタイルシート、RSSフィード、Atomフィード、正規URI、その他のあらゆる種類のアイテムを含めるために既に使用されています。なぜJavaScriptではないのですか?

スクリプトタグを自己完結させたい場合は、私が言ったようにそれを行うことはできませんが、賢い方法ではありませんが、代替手段があります。自己終了リンクタグを使用してJavaScriptにリンクするには、次のように、スクリプトにテキスト/ JavaScriptとrelのタイプを指定します。

<link type="text/javascript" rel ="script" href="/path/tp/javascript" />

4
私はそれが好きですが、なぜそれが「スマート」ではないのですか?
Josh M.

5
スクリプトをロードするジョブを正確に実行するための事前定義されたスクリプトタグがあるためです。なぜ他のものを使用して問題を混乱させるのですか?釘を打つハンマー..靴を使うのは賢明でしょうか?
デイブローレンス14年

8
@daveL- <style>タグがありますが、外部CSSファイルにはリンクタグを使用します。リンクタグの定義:「<link>タグは、ドキュメントと外部リソース間のリンクを定義します。」リンクタグが外部CSSまたはJSに使用されることは完全に論理的であるようです。スペック/クロスブラウザ性などについて話していないことに注意してください。CSSとJSの両方を導入するためにリンクタグを使用することの論理的な性質についてコメントしているだけです... 。靴[アナロジー]が合うかどうかわからない。
Jimbo Jonny、2016年

20

XMLやXHTMLとは異なり、HTMLには自己終了構文に関する知識がありません。XHTMLをHTMLとして解釈するブラウザーは、/文字がタグが自己終了であることを示していることを。代わりに、それらは空の属性のように解釈され、パーサーはタグがまだ「オープン」であると見なします。

と同様<script defer>に扱われ<script defer="defer"><script />として扱われ<script /="/">ます。


33
この説明のようにエレガントですが、実際には間違っています。trueの場合、DOM内のスクリプト要素に「/」属性があります。私はIE、Firefox、Operaを確認しましたが、実際にはそのような属性は含まれていません。
アロヒ、2009

11
/は有効な属性名文字ではないため、破棄されます。それ以外の場合、この説明はかなり明確です。
Hallvors-モニカを

1
実際、一部のHTMLパーサー(特にバリデーター)/は、NET(Null End Tag)構成の一部として解釈する場合があります。
IllidanS4はモニカを2016

18

Internet Explorer 8以前は、XHTMLの適切なMIMEタイプをサポートしていませんapplication/xhtml+xmltext/htmlこれらの古いバージョンのInternet Explorerが何かを実行するために必要なXHTMLをとして提供している場合、HTML 4.01として解釈されます。短い構文を使用できるのは、終了タグを省略できる任意の要素のみです。HTML 4.01仕様を参照

XMLの「短い形式」は、/という名前の属性として解釈されます(等号がないため)は、暗黙的な値「/」を持つものとして解釈されます。これはHTML 4.01では厳密に間違っています-宣言されていない属性は許可されていません-しかし、ブラウザはそれを無視します。

IE9以降では、で提供されるXHTML 5サポートしていapplication/xhtml+xmlます。


IE 9はXHTMLサポートし、IEは51%以上ではなくなりました。回答を更新していただけませんか?
Damian Yerrick 2015年

5

これは、スクリプトタグが無効な要素ではないためです。

HTMLドキュメント - VOID要素がありませんすべてで「終了タグ」が必要!

では、XHTML、すべてが、一般的であるため、彼らはすべての必要性の終了例えばA「終了タグ」。br、単純な改行、<br></br>またはその短縮形を含む <br />

ただし、スクリプトタグは、スクリプトタグであるため、ボイドまたはパラメトリックエレメントになることはありません。は何よりもブラウザインストラクションであり、データ記述宣言ではありません。

主に、「終了タグ」などのセマンティック終了命令は、セマンティクスが後続のタグで終了できない命令を処理する場合にのみ必要です。例えば:

<H1>セマンティクスは<P>、それ自体のセマンティクスをオーバーライドしてそれによって前のH1命令セットを終了するのに十分な量を持たないため、フォローによって終了することはできません。それは破ることができるようになりますが、ストリームを新しい段落の行には、現在のフォントサイズ&スタイル行の高さを上書きする「十分に強い」ではありません下流に注ぎますすなわち、H1から漏れた(Pはそれを持っていないので、 )。

これが、「/」(終了)シグナリングが発明された方法と理由です。

のような一般的な説明なしの終了タグは< />、遭遇したカスケードからの単一のフォールに十分です<H1>Title< />。別のカスケードにラップ/フォールする前に急流に。結果として、などの汎用ターミネーター< />は、終了するプロパティのターゲットを決定できません。例:<b>ボールド <i>ボールドイタリック < /> イタリック </>ノーマル。間違いなく私たちの意図を正しく理解できず、おそらくそれを大胆な太字の斜体の太字の正常ものとして解釈するでしょう。

これは、ラッパー、つまりコンテナの概念が生まれた方法です。(これらの概念は非常に似ているため、識別できず、同じ要素に両方<H1>が含まれる場合があります。同時にラッパーとコンテナの両方になります。一方<B>、セマンティックラッパーのみです)。意味のないプレーンなコンテナーが必要です。そしてもちろん、DIVエレメントの発明が生まれました。

DIV要素は実際には2BRコンテナです。もちろん、CSSの登場により、状況全体が他の状況よりも奇妙になり、多くの重大な結果を伴う大きな混乱を引き起こしました-間接的に!

CSSを使用すると、新しく発明されたDIVのネイティブの前後のBR動作を簡単にオーバーライドできるため、「何もしないコンテナー」と呼ばれることがよくあります。これは当然のことです!DIVはブロック要素であり、終了のシグナリングの前後の両方でネイティブにストリームの行を分割します。間もなくWEBはDIV-itisページに悩まされ始めました。それらのほとんどはまだです。

HTMLタグのネイティブな動作を完全にオーバーライドして完全に再定義する機能を備えたCSSの登場により、HTMLの存在の意味全体を混乱させ、不鮮明にすることができました...

突然、すべてのHTMLタグが古くなったように見え、元の意味、アイデンティティ、目的がすべて取り除かれ、改ざんされました。どういうわけか、あなたはそれらがもはや必要ではないという印象を得るでしょう。説明:すべてのデータ表示には、単一のコンテナーラッパータグで十分です。必要な属性を追加するだけです。代わりに意味のあるタグがないのはなぜですか。あなたが行くときにタグ名を考え出して、CSSが残りの部分に悩まされるようにしましょう。

これは、xhtmlが生まれた方法であり、もちろん大きな鈍器であり、新しい参入者と何が何であり、何がそのすべてのいまいましい目的であるかについての歪んだビジョンによって大いに支払われました。W3Cは、World Wide Webから「仲間達はどうしたの?」

HTMLの目的は、意味のあるデータを受信者にストリーミングすることです。

情報を提供するため。

正式な部分は、情報配信の明確さを支援するためだけにあります。xhtmlは情報を少しでも考慮しません。-それに対して、情報は絶対に無関係です。

この問題で最も重要なことは、xhtmlが拡張されたHTMLの単なるバージョンではなく、xhtmlはまったく異なる獣であることを知り、理解できるようにすることです。根拠; したがって、それらを分離しておくのが賢明です。


3

「true XHTML」、「faux XHTML」、およびHTMLの違いと、サーバーが送信するMIMEタイプの重要性については、すでにここで説明しています。今すぐ試してみたい場合は、次の簡単な編集可能なスニペットで、ライブプレビューに対応したブラウザ用の自己クローズスクリプトタグを含めます。

div { display: flex; }
div + div {flex-direction: column; }
<div>Mime type: <label><input type="radio" onchange="t.onkeyup()" id="x" checked  name="mime"> application/xhtml+xml</label>
<label><input type="radio" onchange="t.onkeyup()" name="mime"> text/html</label></div>
<div><textarea id="t" rows="4" 
onkeyup="i.src='data:'+(x.checked?'application/xhtml+xml':'text/html')+','+encodeURIComponent(t.value)"
><?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
[<!ENTITY x "true XHTML">]>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
  <p>
    <span id="greet" swapto="Hello">Hell, NO :(</span> &x;.
    <script src="data:text/javascript,(g=document.getElementById('greet')).innerText=g.getAttribute('swapto')" />
    Nice to meet you!
    <!-- 
      Previous text node and all further content falls into SCRIPT element content in text/html mode, so is not rendered. Because no end script tag is found, no script runs in text/html
    -->
  </p>
</body>
</html></textarea>

<iframe id="i" height="80"></iframe>

<script>t.onkeyup()</script>
</div>

Hello, true XHTML. Nice to meet you!以下のテキストエリアが表示されます。

対応していないブラウザの場合は、textareaのコンテンツをコピーして、拡張子.xhtml(または.xht)のファイルとして保存できます(このヒントを提供してくれたAlekに感謝します)。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.