iframe 子ページをファイルとして保存
「保存」ボタンでsave()を呼び出し、以下を実行する。
現在iframeに開いているhtmlファイル名を取得
固定部(ヘッダー、フッター)と変動部(変数・記事部)を合わせた全htmlデータを集約
集約したデータをテキストデータのBlob要素としてダウンロードして保存
firefoxによる表示
Edgeによる表示
Edgeのエラーに関して”cross-domain”や”cross-origin”を調べても難しくてよく解らない。
ただ、origin "null"はローカル環境に置いたhtmlファイルを開こうとしていることが原因のようなので、別途簡易サーバによる確認を行なう。
WinMergeによるファイル比較
Firefoxでダウンロード(保存)したchild.htmlファイルはオリジナルのものと完全一致した。
記事用変数の受け渡しが正しく行なわれていることが確認された。
【parent.html】追加部分
<input type='button' id='save' onclick='save()' value='保存'>
【child.html】例文変更
<div id='post1' hidden>記事の変更、確認が行なえたら「保存」ボタンを押してください。
あとは画面の指示に従って、ファイルを保存します。</div>
<p class='textarea'>記事の変更、確認が行なえたら「保存」ボタンを押してください。
あとは画面の指示に従って、ファイルを保存します。</p>
【test.js】追加部分
function save(){
// 現在iframeに開いているhtmlファイル名を取得
var doc = document.getElementsByTagName('iframe')[0].contentWindow;
var child = doc.document.location.href.split('/').pop();
// 確認
alert(child);
// html保存用データの作成
// ヘッダー部
htmlData = "<html lang='ja'>\n";
htmlData += "<head>\n";
htmlData += "<meta charset='UTF-8'>\n";
htmlData += "<link type='text/css' rel='stylesheet' href='./test.css'>\n";
htmlData += "<title>child.html</title>\n";
htmlData += "</head>\n";
htmlData += "<body>\n\n";
// 変数・記事部
htmlData += "<p>child.html</p>\n";
htmlData += insertData;
// フッター部
htmlData += "</body>\n";
htmlData += "</html>\n";
// データの確認
alert(htmlData);
// 全htmlデータをhtmlファイルとしてダウンロード
var htmlContent =[htmlData];
var bl = new Blob(htmlContent, {type: "text/html; charset=utf-8; endings: native;"});
var a = document.createElement("a");
a.href = URL.createObjectURL(bl);
a.download = child;
a.hidden = true;
document.body.appendChild(a);
a.innerHTML = "something random - nobody will see this, it doesn't matter what you put here";
a.click();
}
【test.css】変更なし
|