MTOS管理画面のSSL化:プレビューがうまくできない問題の修正

httpsで管理画面からプレビューしたら、プレビューが真っ白

SSL化したMTOSの画面にて、記事のプレビューをやってみると、プレビューが真っ白になってました。
テンプレートの編集画面からプレビューした際も、同様です。

修正

問題の発生している箇所の特定

htmlソースを見ると、iframeあたりが怪しいようです。

プレビューのページは、静的に生成したプレビュー用ページを、iframeタグで読み込む仕様になっています。
恐らく、httpsのウェブページ内で、iframeをhttpのページを読んでいるのが原因、と思われます。

問題の箇所:

<td id="entry-preview-content" class="preview-content">
<iframe id="frame" frameborder="0" scrolling="auto" src="/knowledge/2014/mt-preview-22a3d2445df792277f264456b912264abdcbe364.html?000932" onclick="return TC.stopEvent(event);"></iframe>
</td>

この部分について、htmlソースの生成を司っているのは、MT本体内の次のファイル。

  • [MTのルートディレクトリ]/tmpl/cms/preview_strip.tmpl
  • [MTのルートディレクトリ]/tmpl/cms/preview_template_strip.tmpl

preview_strip.tmpl は、ウェブページ/記事編集画面からプレビューを行った際に、
preview_template_strip.tmpl は、テンプレート編集画面からプレビューを行った際に、
それぞれ読み込まれます。

記事からプレビューした際の表示の修正

preview_strip.tmpl は、139行目あたりに、問題の部分の生成コードがあるので、そこを修正します。

修正前

<iframe id="frame" frameborder="0" scrolling="auto" src="<$mt:var name="preview_url"$>?<mt:date format="%H%M%S">" onclick="return TC.stopEvent(event);"></iframe>

修正後

<mt:setVarBlock name="var_abs2rel">/https?:\/\/(www\.|)km92.net/g</mt:setVarBlock>
<iframe id="frame" frameborder="0" scrolling="auto" src="<$mt:var name="preview_url" regex_replace="$var_abs2rel","" $>?<mt:date format="%H%M%S">" onclick="return TC.stopEvent(event);"></iframe>

MTの変数 preview_url を mt:var にて出力する際に、
予め変数 var_abs2rel に格納していた置き換えパターンを用いて、
preview_urlの内容をルート相対パス化します。

結果、次のように出力され、プレビューもブラウザに正常に表示されました。

<td id="entry-preview-content" class="preview-content">
<iframe id="frame" frameborder="0" scrolling="auto" src="/knowledge/2014/mt-preview-22a3d2445df792277f264456b912264abdcbe364.html?000932" onclick="return TC.stopEvent(event);"></iframe>
</td>

テンプレート編集画面からのプレビューした際の修正

手順は preview_strip.tmpl の時と同様。130行目あたりを次のように修正します。

<mt:setVarBlock name="var_abs2rel">/https?:\/\/(www\.|)km92.net/g</mt:setVarBlock>
<iframe id="frame" frameborder="0" scrolling="auto" src="<$mt:var name="preview_url" regex_replace="$var_abs2rel","" $>?<mt:date format="%H%M%S">" onclick="return TC.stopEvent(event);"></iframe>

結果

無事にプレビューがまた見れるようになりました。

関連するタグ

MTOS5, MTOS5.2.10, SSL