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

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

新規登録して質問してみよう
ただいま回答率
85.36%
Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

Markdown

Markdownは、文書の構造、修飾情報を記述するための軽量マークアップ言語です。

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

5314閲覧

Markdownで作ったhtmlファイルのページ内リンク(アンカー)がIEで使えない

SolKul

総合スコア14

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

Markdown

Markdownは、文書の構造、修飾情報を記述するための軽量マークアップ言語です。

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2019/07/25 16:10

編集2019/07/25 23:04

#状況
VScode上でMarkdown Preview Enhancedを使い、HTMLで文章を書いているのですが、
Markdownで作ったhtmlファイルのページ内リンク(アンカー)がIEで使えません。

Markdown Preview EnhancedをインストールしたVScode上で

markdown

1[ほげ](#ほげ) 2#ほげ

としてヘッダー「ほげ」にアンカーを作ります。
そしてCtrl+K→Vを押してプレビュー画面を表示させます。
そしてプレビュー画面を右クリックし、html化します。

そしてそのhtmlをChromeで開くとアンカーは使えますが、
IEで開くと、アンカーは使えません。

そのとき生成されるhtmlのソースがこれです。

html

1... 2<a href="#%E3%81%BB%E3%81%92">&#x307B;&#x3052;</a><br> 3URL Standard&#x3067;&#x306F;&#x3001;URL&#x306E; 4... 5<h1 class="mume-header" id="%E3%81%BB%E3%81%92">&#x307B;&#x3052;</h1> 6...

#動作
調べたところ、このアンカーというのは、html化する際、
まずヘッダーの名前から自動的にIDを生成して、
<h1 class="mume-header" id="ヘッダー名">ヘッダー名</h1>
としてヘッダーを作ります。

そしてマークダウン上で
[](#ヘッダー名)
と書くと、html化する際、
<a href="#ヘッダー名"></a>とすることで、アンカーを作っているようです。

#経緯
昔はLatin文字以外をヘッダーにしたら、
たいていidがおかしくなって、アンカーは使えなかったらしいです。

Latin以外はURLエンコーディングしてアンカーを使えるように
pull requestしてくれた人がいたらしいです。

Markdown-it の markdown-it-named-headers plugin で custom slugify を設定する

ただ、URLエンコーディングはIEではIDとして使えないようです。

状況としては
ページ内リンクが日本語だとIEでリンクが効かない

このブログ記事と同じ問題です。

#謎

ただこの問題が単純じゃないのは、下記のサイト(Qiita)のようにヘッダーにURLエンコーディングされたIDを使っていても、
IEでも正しくアンカーが使える場合があるようです。

[Qiita Markdown記法]ページ内リンク・注釈・折りたたみ等

#回答お願いします
この謎な挙動が解明され、IEでもMarkdownで作ったhtmlをスムーズに使えるようになると大変助かります。

#環境
Windows 10 Pro
Visual Studio Code 1.30.1
Markdown Preview Enhanced 0.4.3

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/07/25 22:49

markdown とは関係なく、Markdown Preview Enhanced で生成された html を IE で表示させると、a タグが適切に表示されない。と読み取ったのですが、正しいですか?再現するコードを質問に記述すると回答しやすいと思います。
SolKul

2019/07/25 22:56

おっしゃるとおり、Markdown全体の問題ではなく、Markdownをhtmlにパースするモジュールの問題かもしれませんが、 Markdownをhtmlにパースするプラグインはいくつかあるようで、Markdown Preview Enhancedだけの問題ではないようです。 この問題に対するPull RequestもVScode全体に対するものですし https://github.com/Microsoft/vscode/issues/20626 ただ、再現するコードを正確に質問文に記載してなかったのはこちらの落ち度です。 付け加えます。
guest

回答2

0

oikashinoaさんのヒントをもとにパーサーをいじってみました
Extend Markdown Parser
を参考に、

C:\Users\ユーザー名.mume\parser.js
のparser.jsを編集します

js

1module.exports = { 2 onDidParseMarkdown: function(html) { 3 return new Promise((resolve, reject)=> { 4 var regex=RegExp('id=\".*%.*\"') 5 while(regex.test(html)){ 6 html = html.replace(/(id=\".*)%(.*\")/g, '$1$2') 7 } 8 9 var regex2=RegExp('\<a.*href=\".*%.*\"') 10 while(regex2.test(html)){ 11 html = html.replace(/(\<a.*href=\".*)%(.*\")/g, '$1$2') 12 } 13 return resolve(html) 14 }) 15 } 16}

正規表現を使って%を除去しています
単純に正規表現とreplaceだと一回しか%を除去できないので
while文も使っています。

ただもっといい方法があるかもしれないです。

これで

html

1<a href="#E381BBE38192100">ほげ100%</a> 2<h1 class="mume-header" id="E381BBE38192100">ほげ100%</h1>

のように%が除去でき、IEやEdgeでもアンカーが使えるようになりました。

oikashinoaさんありがとうございました。

投稿2019/08/18 11:24

編集2019/08/18 11:26
SolKul

総合スコア14

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

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

oikashinoa

2019/08/18 12:30

おお動いたのですね。おめでとうございます。
SolKul

2019/08/18 13:27

ありがとうございます。
guest

0

ベストアンサー

スマホから書き込みなのと当方IEが無いのでアイディアレベルの書き込みです。

Markdown Preview Enhancedのドキュメント見ると成形用のパーサーが呼べるようです。
アンカーとaタグからurlエンコード後の%を削るパーサーを書けば対処出来ませんか?

投稿2019/08/16 03:32

oikashinoa

総合スコア2826

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問