753Note

ブログページ作成メモ

とことんまでiframeにこだわってみた

このページの構成

  1. iframeのメリット・デメリット
  2. ブログページの基本構想
  3. ヘッダー (header)
  4. カレンダー表示部 (sub1ウィンドウ)
  5. ブログリスト表示部 (sub2ウィンドウ)
  6. ブログ表示部 (mainウィンドウ)
  7. 年齢の計算式
  8. 自動的に親ページが開く仕掛け
  9. 完成したブログ
  10. ブログ作成・編集機能

1. iframeのメリット・デメリット

関連する記事を調べてみましたが、まとめると以下のようになります。

 ○ iframeのメリット
   外部のWEBページを簡単に読み込める
   iframe部分のみの更新・変更で済む場合には作業が楽
 × iframeのデメリット
   iframeで読み込まれたページは親ページのコンテンツの一部として評価されない
   一般に文章はフレームページ側に書かれているので親ページは検索でヒットしにくい
   フレームページ側が単独で開かれた場合にはそれ以外のコンテンツが表示されない

SEO効果が期待できないことが共通のデメリットとして挙げられています。
要は、”いいね”が付かないものは”映え”が悪いということのようです。
今はほとんど使われない古い手法だというご意見もいただきました。
ただ、”いずれにしてもユーザーファーストであることが重要”というアドバイスもありました。
新たなブログを作成するにあたって、自身がまず第一のユーザーとなって、iframeを有効に活かす方法を考えてみたいと思います。

2. ブログページの基本構想

ページのレイアウトを最初にきちんと決めておくことが重要です。
  ヘッダーにはブログ名などを入れます。
  サイドバーには索引機能を兼ねたカレンダーとブログリストを表示します。
  ブログ表示部がメインウィンドウとなります。
#header、#sub1、#sub2、#mainの配置と、スタイルの記述を下図に示します。

2-1: 各要素の配置

各要素は境界が分かりやすくなるように「box-sizing: border-box」で指定しています。
#mainを画面いっぱいに取り、ヘッダー部分の高さ50px、サイドバー部分の幅350pxに相当する部分にsolidで境界枠が設けてあります。
 ⇒ サンプルの表示★

2-2: #mainのみの表示
2-3: 要素がずれている場合の表示

#mainのみを表示すると2-2のようになっていることになります。
したがって、各要素の配置がずれている場合には2-3のように表示されますので確認が容易です。

3. ヘッダー (header)

ヘッダーには、以下の3項目を横に並べて表示したいと思います。
  年齢(○歳○ヶ月と○日)
  ブログ全体のタイトル
  ブログのテーマを表わす画像アイコン5枚
ここではそれらを配置する準備を行ないます。

3-1: 各要素の配置

#headerに「display: flex」と「justify-content: space-around」を追加して、間に挟み込んだ3つの<div>要素#p1、#p2、#p3を両端にも空白を設けて横並びにします。
 ⇒ サンプルの表示★

4. カレンダー表示部 (sub1ウィンドウ)

カレンダーは単に日付を表示するだけでなく、ブログ検索メニューを兼ねさせたいと思います。
カレンダーのサンプルとして、基本的な機能を備えているものを2つ見つけることができました。
「にゃんぶろぐ」さんのものは”今日”の設定と該当月以外の前後の日を表示できること、また「cly7796.net」さんのものはリンクの設定ができる点が大きな特長でした。
  【初心者向け】JavaScriptでカレンダー作成【サンプル】 - nyanblog
  JavaScriptで作成したカレンダーの日付にリンクを設定できるようにする - cly7796.net
結局、両者のいいとこ取りをさせていただき、また分かり易く解説してあったので私自身で機能追加を行なうこともできました。
この場を借りてお礼を申し上げます。

4-1: 「にゃんぶろぐ」さんのサンプル
4-2: 「cly7796.net」さんのサンプル

以下、「cly7796.net」さんのサンプルをベースに、自身で行なった変更内容を備忘録としてまとめておきます。

1. 当月の初日より前と末日より後の日付を表示
4-3: 変更前
4-4: 変更後

【JS】calendarDataにおいて空欄となっている該当部分の'day'(日付)にもデータを格納
【CSS】該当する日付にはclass="disabled"を追加して薄字で表示
 ⇒ サンプルの表示★

2. 今日の表示
4-5: 変更前
4-6: 変更後

【JS】日付が今日であるかを判定するスクリプトを記述
【CSS】今日の日付にはclass="today"を追加して色付きで表示
 ⇒ サンプルの表示★

3. リンクの追加と表示
4-7: 変更前
4-8: 変更後

【JS】ブログリスト用データを作成し、日付が一致したものにはリンクを記載
【CSS】該当する日付にはclass='blog'を追加してblock化とhover機能で表示
 ⇒ サンプルの表示★

4. 年/月の指定でカレンダーを表示する機能を追加
これが一番欲しかった機能です。
ある著名なブログサイトでも一月ずつ送っていくものしかなくちょっと面倒に感じたので、なんとか自分で作ってみようと思い立ちました。
4-9: 1955年1月へ”Go”
4-10: ”Reset”で今日に戻る

【HTML】”年”と”月”のinput欄、”Go”ボタン、”Reset”ボタンを追加
【JS】”Go”ボタンで呼び出される「function go()」、
【JS】”Reset”ボタンで呼び出される「function reset()」を記述
 ⇒ サンプルの表示★

5. 表示のカスタマイズ
4-11: 1955年1月へ”Go”
4-12: ”Reset”で今日に戻る

【HTML】
  年と月の入力値をそれぞれ"1955〜2055、1〜12に制限
  ”年”と”月”の文字やスペース部が選択されて邪魔にならないようuser-select: noneを設定
【JS】
  ブログリストに2022年11月分のサンプルを追加
  送りボタンの表示を”<”、”>”に変更
【CSS】
  ブログのイメージに合わせて各要素のスタイルをカスタマイズ
  リンクが操作しやすいようにblock化とhover機能を採用
 ⇒ サンプルの表示★

5. ブログリスト表示部 (sub2ウィンドウ)

5-1: これまでに完成した部分

ここまでに作成したものを合体すると、このようになります。
 ⇒ サンプルの表示★

司令塔の役割を果たすカレンダーができたのでとりあえず一段落です。
ここからはsub2ウィンドウとmainウィンドウにiframeを作成していく作業になります。
合体したこのベース部分を親ページと呼び、関連するファイルを以下のように呼び改めます。
  index.html
  base.js (スクリプト部分)
  data.js (ブログリストデータ部分)
  base.css

5-2: sub2ウィンドウの役割

sub2ウィンドウには、iframe1ページとしてブログリスト「list.html」を表示します。
その際、カレンダーの年月入力あるいは送りボタンで操作された年月を頭出しします。

iframe1ページ用のファイルとして以下のものが追加となります。
  list.html --- ブログリスト
  bloglist.js --- data.jsを元にlist.htmlを作成するスクリプト
尚、data.jsとbase.cssは親ページと共用(流用)です。

各ファイルに対する作業内容を示します。
■ブログリストの作成
 【list.html】
   <div>要素として"bloglist"を定義
     <div id="bloglist"></div>
 【bloglist.js】
   ブログリスト用データ【data.js】を元に"bloglist"を作成するスクリプトを記述
■ブログリストの表示
 【index.html】
   <aside>要素"sub2"に"bloglist"を定義
     <aside id="sub2">
     <div id="bloglist"></div>
     </aside>
 【base.js】
   指定された年月で"bloglist"を表示する「show_bloglist(year, month)」を記述
   同関数により以下の5箇所でブログリストを表示
     window.onload = function()
     function go()
     function reset()
     前月ボタンをクリックした時
     翌月ボタンをクリックした時

5-3: 完成したsub2ウィンドウ

概ね期待どおりのものができました。
ちょっとしたメッセージを書き込んで表示することも可能です。
 ⇒ サンプルの表示★

6. ブログ表示部 (mainウィンドウ)

6-1: mainウィンドウの役割

mainウィンドウには、カレンダーあるいはブログリストからリンクで呼び出されたブログ記事、例えば「2022-08-31.html」をiframe2のページとして表示します。
また、iframe2内では”前へ”、”次へ”ボタンで記事を送ることも可能にします。

iframe2ページ用のファイルとして以下のものが追加となります。
  xxxx-xx-xx.html --- 各ブログ記事
  blog.js --- 表示用スクリプト
  blog.css --- 表示用スタイル
あと、blog.jsがdata.jsを参照します。

各ファイルに対する作業内容を示します。
■ブログ記事の作成
 【xxxx-xx-xx.html】
   作動確認用のサンプル(雛形)を作成
   詳細は後の10.で解説します。
■ブログ記事の表示
   load時には日付が最新のブログ記事を表示(base.jsによる)
 【blog.js】
   ブログリスト用データを参照して表示を切り替えるスクリプトを記述
    ・現在開いているファイル名から記事の日付とタイトルを表示
    ・「←前へ」「次へ→」ボタンによりフレーム内でページを送る
   動画(video)コンテンツはマウスオーバー時のみコントロールを表示
 【blog.css】
   背景画像のサンプル「summersky.jpg」を準備
   背景は「background-attachment: fixed」として固定(コンテンツのみスクロール)

6-2: 完成したmainウィンドウ

完成したので、8月31日の記事を表示してみました。

6-3: 2022-09-02.html
6-4: 2022-09-28.html

各ブログ記事「xxxx-xx-xx.html」は単独で開いても正常に表示されます。
また、その状態で送りボタンを操作して期日を移動できることも確認しました。

6-5: 2022年9月2日のブログ記事
6-6: 2022年9月28日のブログ記事

いくつかのパターンでサンプルを作って、各機能が思ったように作動するか確認しました。
ローカルの環境ではサクサクと動くようです。
 ⇒ サンプルの表示★

実はまだ大切な課題が残っているのですが、それは少し後回しにします。

7. 年齢の計算式

簡単?な問題から片付けます。
年齢の算出方法にはいくつかあるようですが、自分なりの思考回路でアプローチしてみました。
あなたは生まれてから今日で、○歳△ヶ月と□日になりますか?

【特殊解】
まず、特殊解として誕生日が今年(2022年)の5月8日の場合を考えてみます。
今日の日付はyear年month月day日とします。
□日の部分
 今日が今月の8日を過ぎていれば、day - 8 です。
 8日より前であれば、誕生月の前月である4月の8日から何日目かを考えればよいので、
 前月分の 30 - 8 日に今月分のday日を加えた、30 - 8 + dayとなります。
 この場合には4月分の30日つまり△1ヶ月分を借りて計算していることになります。
△ヶ月の部分
 考え方は□の場合と同様です。
 5月を過ぎていれば、month - 5 です。
 5月より前であれば、12 - 5 + monthとなります。
 この場合、12ヶ月つまり○1年分を借りていることになります。
 あとは□の計算で貸している分があればそれぞれから -1 します。
  ただし、今日が2022年の5月で8日より前の場合には求めた△の値が -1 になるので、
  その場合には△を 11 として○から1年借ります。
○歳の部分
 ここは簡単です。
 2022年月を過ぎていれば、year - 2022で、貸している分がある場合には -1 します。
  ただし、ここでも前述の条件下では計算上○が -1 になってしまうので 0 とします。
 2022年より前であれば、○も△も□もとなります。

/**
 * 年齢の計算と表示(特殊解)
 * @param {number} sai - ○歳
 * @param {number} kagetsu - △ヶ月
 * @param {number} nichi - □日
 */
    // 誕生日が2022年5月8日の場合
    if(day >= 8){
      var nichi = day - 8;
      var kagetsu = 0;
    }else{
      var nichi = 30 - 8 + day;
      var kagetsu = - 1;
    }
    if(month >= 5){
      var kagetsu = kagetsu + month - 5;
      var sai = 0;
          if(kagetsu == -1){
          var kagetsu = 11;
          var sai = -1;
          }
    }else{
      var kagetsu = kagetsu + 12 - 5 + month;
      var sai = - 1;
    }
    if(year >= 2022){
      var sai = sai + year - 2022;
          if(sai == -1){
          var sai = 0;
          }
    }else{
      var sai = 0;
      var kagetsu = 0;
      var nichi = 0;
    }
    // 年齢の表示
    var insertData = "JRT(B)♀ " + sai + "歳" + kagetsu + "ヶ月" + nichi + "日";
    document.querySelector('#p1').innerHTML = insertData;
});

【一般解】
つぎに一般解を、誕生日(Birthday)をByear年Bmonth月Bday日として考えてみます。
特殊解を眺め直してみると、その中で特別な数値は4月の日数30日、つまり誕生月の前の月の日数だけであることが分かります。
前の月の日数をPMdaysとするとその値は、
  1月、2月、4月、6月、8月、9月、11月の誕生月に対しては 31
  5月、7月、10月、12月の誕生月に対しては 30
  3月の誕生月に対してだけは閏年に依って、28 あるいは 29 となります。
このPMdaysを求める式もdate()関数を使えばスマートに記述できると思いますが、ここは単純な分岐文と閏年の定義に立ち返って記述してみました。
尚、閏年の定義は次の1.、2.のいずれかを満足することです。
  1. 西暦が4で割り切れる、かつ、100で割り切れない
  2. 西暦が400で割り切れる
あとは、特殊な数値を一般式に書き改めるだけです。
□日の部分
 dayがBdayを過ぎていれば、day - Bday です。
 dayがBdayより前であれば、PMdays - Bday + dayとなります。
 貸し借りの考え方と処理は変更ありません。
△ヶ月の部分
 考え方は□の場合と同様です。
 monthがBmonthを過ぎていれば、month - Bmonth です。
 monthがBmonthより前であれば、12 - Bmonth + monthとなります。
 貸し借りの考え方と処理は変更ありません。
○歳の部分
 yearがByearを過ぎていれば、year - Byearです。
 yearがByearより前であれば、0です。
 貸し借りの考え方と処理は変更ありません。

【base.js】(追加部分)
/** * 年齢の計算と表示 * @param {number} sai - ○歳 * @param {number} kagetsu - △ヶ月 * @param {number} nichi - □日 * @param {number} Byear - 誕生年 * @param {number} Bmonth - 誕生月 * @param {number} Bday - 誕生日の日付 * @param {number} PMdays - 誕生月の前月の日数 */ // 誕生日を入力 const Byear = 2022; const Bmonth = 5; const Bday = 8; // 誕生月の前月の日数を算出 if(Bmonth==1||Bmonth==2||Bmonth==4||Bmonth==6||Bmonth==8||Bmonth==9||Bmonth==11){ var PMdays = 31; } if(Bmonth==5||Bmonth==7||Bmonth==10||Bmonth==12){ var PMdays = 30; } if(Bmonth==3){ if( (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) { var PMdays = 29; } else { var PMdays = 28; } } // 年齢の計算 if(day >= Bday){ var nichi = day - Bday; var kagetsu = 0; }else{ var nichi = PMdays - Bday + day; var kagetsu = - 1; } if(month >= Bmonth){ var kagetsu = kagetsu + month - Bmonth; var sai = 0; if(kagetsu == -1){ var kagetsu = 11; var sai = -1; } }else{ var kagetsu = kagetsu + 12 - Bmonth + month; var sai = - 1; } if(year >= Byear){ var sai = sai + year - Byear; if(sai == -1){ var sai = 0; } }else{ var sai = 0; var kagetsu = 0; var nichi = 0; } // 年齢の表示 var insertData = "JRT(B)♀ " + sai + "歳" + kagetsu + "ヶ月" + nichi + "日"; document.querySelector('#p1').innerHTML = insertData; });

誕生日や今日の日付を変えて何ケースか確認した限りでは計算は合って入るようですが・・・
特に3月生まれの場合には(私もそうですが)注意が必要かも知れません。

7-1: 完成した年齢表示欄


8. 自動的に親ページが開く仕掛け

さて、本質的な課題に戻ります。
ブログの立ち上げに先立ちWebサーバ上で試験公開を行なったところ、翌日にはGoogleの検索にかかるようになりましたが、二三日が経過してもヒットするのはいくつかの個別のブログ記事(xxxx-xx-xx.html)だけで、肝心の親ページ(index.html)は見当たりません。
個別ページにしか記事のコンテンツがないので、当然の結果かも知れません。
また、個別ページを開いた場合でも前後ボタンでページ送りは可能ですが、メニューもなく全体が俯瞰できないので、これでは全くユーザーファーストではありません。

検索のヒットが目的ではありませんが、記事にアクセスしてくれた人を使い勝手のよい親ページに導く方法を考えることにしました。
  1. 何か操作をして親ページに移動してもらうのではなく自動で遷移すること
  2. 親ページで開くのは、アクセスのあったブログ記事のページであること
  3. 最新のブログ記事へもすぐに移動できるよう、”最新”ボタンを追加する

■自動遷移とブログ記事の表示
 【blog.js】 --- ブログ記事側
   開かれた個別ページのファイル名をクエリーパラメータで伝達して親ページを開く
 【base.js】 --- 親ページ側
   受け取ったクエリーパラメータで個別ページをiframe上に開く
   親ページが直接開かれた場合には通常どおり最新のブログページを開く
【blog.js】(追加部分)
window.addEventListener('load', function(){
  // 現在開いているファイル名を取得
    var blogdate = window.location.href.split('/').pop().slice(0,10);
  // 単独で開かれた場合には親ページへ
    if(window == window.parent) {
            location.href = "../index.html?d=" + blogdate;
    }else{
}
});

【base.js】(変更部分)
    // ブログ記事の表示
    var url = new URL(window.location.href);// URLを取得
    var params = url.searchParams;// パラメータを取得
    if (params == ""){
    var blogdate = data[data.length - 1][0];// 最新ブログ
    }else{
    var blogdate = params.get('d');// 呼び出しブログ
    }
    var insertData = "<iframe name='content' src='./blog/" + blogdate + ".html'></iframe>";
    document.querySelector('#main').innerHTML = insertData;

■”最新”ボタンの追加
 【yyyy-mm-dd.html】
   最新ボタンの追加
 【blog.css】
   最新ボタンの追加
 【blog.js】
   最新ボタンをクリックした時のイベント設定
【yyyy-mm-dd.html】(追加部分)

<p class="move">
 ・・・・・・
<button type="button" id="newest">最新</button>
</p><br>


【blog.css】(追加部分)

#newest {
  font-size: 14px;
  color: #000;
  margin: 0px 0px 0px 0px;
}


【blog.js】(追加部分)

// 最新ボタンをクリックした時のイベント設定
    var newest = document.getElementById("newest");
    newest.addEventListener('click', function() {
    location.href = "./" + data[data.length-1][0] + ".html";
    });

8-1: 個別ページからのアクセス時
8-2: ”最新”ボタンで最新ブログへ移動


9. 完成したブログ

9-1: 公開ブログ

公開中のブログです。
よろしければ、立ち寄ってみてください。
 ⇒ Webページへ★

9-2: 画像アイコン部

画像アイコン5枚は「イラストレイン」さんのものからピックアップさせていただきました。
  犬のイラスト | かわいいフリー素材が無料のイラストレイン
サンプル用にと思ったのですが、イメージに合うので結局そのままになってしまいました。
ありがとうございます。

10. ブログ作成・編集機能

最後の内容になります。
ブログは家内と共同で運用しますので、簡単にブログの作成や編集が行なえるようにしました。
ブログ用のデータはすべて家庭内LAN上のNASに置いてあります。
各PCからは「ブログ作成・編集」フォルダのショートカットを開いて作業を行ないます。

10-1: 「ブログ作成・編集」フォルダ

「ブログ作成・編集」フォルダにも必要なショートカットを並べて、ここだけで作業が完結できるようにしました。

【0. ブログ画面】【0. ブログ作成・編集画面】
それぞれをダブルクリックで開くと、現在のブログの状態を確認することができます。
ここでは既定のブラウザとしてFirefoxを使用しますが、その理由は後で説明します。

10-2: ブログ画面
10-3: ブログ作成・編集画面

両者とも最新のブログが表示されますが、サイドバーの表示メニューだけが異なっています。
#sub1ウィンドウにはカレンダーの代わりにブログ作成・編集用のGUIが表示されます。
#sub2ウィンドウは#sub1ウィンドウを広げた分、狭くなっているだけです。

10-4: ブログ作成・編集画面(拡大)

ブログ作成・編集画面を拡大したものです。
後で詳しく説明しますが、このようにGUIには記事の内容が自動的に読み込まれるようになっていますので、すでにある記事を編集するといった作業も可能になります。

【1. 作業手順】
ブログの作成・編集手順を書き記したテキスト書類です。
慣れるまでは、作業を始める際に開いて読みながら作業を進められます。

 「ブログ画面」はブログ閲覧用、「ブログ作成・編集画面」はブログ作成用
 以下は、ブログを新規作成する場合の手順

 1. 「作業手順」(この書類)を開く(ダブルクリック)
  「ブログ作成・編集画面」をダブルクリックで開く
  画面と作業手順を見比べながら作業を進める
  「作業手順」や「ブログ作成・編集」フォルダはタスクバーのアイコンで手前に表示可能
  尚、以下の作業において各フォルダは(右クリック/新しいウィンドウで開く)と作業がやりやすい

 2. 登録リストへの登録
  「登録リスト」を開く(右クリック/プログラムから開く/メモ帳)
  ブログを追加作成する場所の前や後の行をマウスでドラッグして選択
  その状態でコピー(右クリック/コピー、またはCtrl+C)
  マウスで選択行の右端(外)をクリックして選択を解除し、改行(Enter)
  その状態でペースト(右クリック/ペースト、またはCtrl+V)
  新たな日付とタイトルを記入する(日付は正確に、タイトルは全角18文字以内)
  記入したらファイルを保存して(ファイル/保存)、閉じる(×)

 3. ブログデータの準備
  「ブログ」フォルダ内にある「yyyy-mm-dd.html」をコピー
       (右クリック/コピーアイコン/ペーストアイコン、または Ctrl + C/Ctrl + V)
  作成されたファイルに「登録リスト」に登録したものと同じ日付を入れる
  ファイルを「ブログデータ」にドラッグ&ドロップ

 4. 静止画・動画データの準備
  スマホやPC、「Googleから転送」フォルダにあるものをこのフォルダに持ってくる
  サンプルに従って正しいファイル名を付ける(日付部はyyyymmdd形式)
  ファイルを「静止画・動画データ」フォルダにドラッグ&ドロップ

 ■ブログ作成画面の説明
 【読み込み】ボタン
  表示されたページのデータは自動で読み込まれるので基本的には操作不要
  【データの確認・表示】ボタンを押す前であれば、作業の途中で再読み込みが可能

 【データの確認・表示】ボタン
  クリックの都度、入力した内容を確認・表示
  ただし【出力】ボタン以降の作業を行なわない限りデータは保存されない

 【出力】ボタン
  (1)貼り付ける内容の選択とコピー
   「出力」ボタンをクリックしてテキスト画面を表示
   <div id='b11' hidden>〜</div>(すべて)をマウスのドラッグで選択
   選択(青く)した状態でキー(Ctrl + C)を押してコピー
   作業が終わるまでは取りあえず「OK」はしないでそのまま画面を開いておく
  (2)貼り付け先の選択とペースト
   「ブログデータ」フォルダをダ開く
   対象の日付の付いた作業中のファイルを開く(右クリック/プログラムから開く/メモ帳)
   中段部にある<div id='b11' hidden>〜</div>をマウスのドラッグで選択
   選択(青く)した状態でキー(Ctrl + V)を押してペースト
  (3)ファイルの保存
   貼り付けが終了したら保存(ファイル/保存)して閉じる(×)
   開いたままのテキスト画面を「OK」で閉じる

 以上の作業を行なうと、作成したブログファイルが保存される。
 追加の作業や修正は、この状態から行なえる。

【2. 登録リスト】
ショートカット化して名前を変えてありますが、ブログリスト用データ「data.js」のことです。
新規のデータを作成するには、まずこれに登録する必要があります。
右クリックから開きます。

10-5: 現状
10-6: 登録

新規に作成するブログの日付とタイトルを登録します。
挿入する場所はどこでも構いませんが、ここでは最後尾に入れます。

【3. ブログデータ】
あと、ブログ用のHTMLデータを作成しておく必要があります。

10-7: ブログデータの作成

雛形として置いてあるブログデータ「yyyy-mm-dd.html」をコピーして、ブログリストに登録した日付と同じファイル名を付けます。
作成したファイルを「3. ブログデータ」フォルダにドロップして登録終了です。

再度「0. ブログ作成・編集画面」を開いてみます。

10-8: 雛形画面の表示

このように、#sub2ウィンドウのブログリストに新規のブログが登録され、#mainウィンドウには雛形の画面が表示されます。

10-9: GUIと雛形画面

また、#sub1ウィンドウのGUIには、#mainウィンドウの雛形画面に対応したデータが読み込まれた状態になります。
GUIの使い方や注意点は雛形の中にも簡単に書き込みましたが、以下のようなものです。
  ・第1ブロックから第6ブロックまでの必要なものを使い、不要なものは空欄で可
  ・コメントの記入欄は使用時にサイズを拡大することが可能
  ・画像(静止画)と動画の挿入が可能、ただしファイル名の付け方などにはルールを設定
  ・動画のコメント欄には識別用としてビデオカメラのアイコンを自動表示

【4. 静止画・動画データ】
ブログに使用するデータを、例えば「5. Googleから転送」したデータなどから持って来ます。

10-10: 静止画・動画データの準備

このブログには2つの動画を使用することにします。

10-11: 静止画・動画データの登録

ファイル名のルールに従って、頭にPを付け、ブログと同じ日付をyyyymmdd形式で記述し、ハイフン(-)と1桁の追番を付けます。
ファイル名を変更したら「4. 静止画・動画データ」フォルダにドロップして登録完了です。

10-12: 動画データの入力

10-13: 各ボタン

不要なブロックを空欄にして、動画のファイル名を入力し、「データの確認・表示」ボタンを押すと、入力した内容を確認できます。
あとは、コメントを入れていくだけですが、その前に「出力」ボタンを押します。
残念ながらJSの範疇ではhtmlファイルを保存できる機能がないので以下の作業が必要です。

10-14: alert画面の表示(@Firefox)

「出力」ボタンによりhtmlのコンテンツ部分をalertとして書き出すスクリプトを記述しました。
Firefoxであれば量が多くても全文を表示してくれます。

10-15: alert画面のコピー(@Firefox)

また、テキストとして表示画面からのコピーも可能です。
マウス操作による手作業で全文をコピーします。(OKボタンではありません)
OKボタンはalertの内容を確認して単に閉じるためのものです。

10-16: htmlの保存作業

「3. ブログデータ」フォルダにある「2022-11-23.html」をテキストとして開きます。
対応する部分を選択してペーストで貼り込み、ファイルを保存します。

10-17: 文章の入力

入力画面に戻って文章の入力を続け、必要に応じて「出力」ボタンから保存作業を行ないます。

10-18: 各ボタン

少し面倒ですが、この作業をやらないとついうっかりと作業中のデータを消してしまいます。
また、データの「読み込み」ボタンはデータを再読み込みする場合に使用します。
ただし、「データの確認・表示」ボタンを押したら、その変更後の状態にまでしか戻れません。
文章を作成したら、もう一度「出力」ボタンから保存作業を行なって完了です。

10-19: ブログの完成

ブログ画面を開くと新しいブログが掲載されています。
 ⇒ サンプルの表示★

関連するファイルは以下のものになります。
 【build.html】
  index.htmlの#sub1部分をカレンダーからGUIに変更
 【base-b.js】
  base.jsに対して上記関連部分を変更
 【base-b.css】
  base.cssに対して上記関連部分を変更
 【yyyy-mm-xx.html】
  ブログ記事の雛形htmlを新規に作成
  (あと、これまでに作成したブログ記事もすべて雛形の形式に書き換えました)
 【build.js】
  ブログ編集用スクリプトを記述
   function pickup() --- ブログ記事のhtmlからコンテンツの内容を変数として取得
   function build() --- コンテンツの内容の書き換え
   function output() --- コンテンツの内容をalertとして表示

最後に、注意書きを兼ねて。
今回のように親ページからiframe内のDOM(コンテンツ)を操作する場合には、”同一オリジンポリシー”とか”クロスドメイン制約”といった制限があるようです。
詳しい内容は分かりかねますが、実際に自身のローカル環境で確認したところ、今回作成した「build.html」はFirefoxでは作動しますがEdgeでは作動しませんでした。
尚、サーバー環境に置けばEdgeでも作動することは確認できました。

ただ、ブログの作成や編集はローカル環境でできれば事足りる話なので、このような制約やalertを利用した手作業に関してもあまり気にせず、Firefoxでできる方法を考えてみました。
もちろん、作成したブログの方はサーバー上で問題なく動いて欲しいものです。


Copyright 2022 WaterFront111 All rights reserved.