« IEで表示中のページのタイトルとURLをクリップボードにコピーする。 | トップページ | 「Web ページ、完全 (*.htm;*.html)」で「名前を付けて保存」する。 »

2008年6月 4日 (水)

「Web ページ、HTML のみ (*.htm;*.html)」で「名前を付けて保存」する。

IEで「Web ページ、HTML のみ (*.htm;*.html)」で保存しようとしても、デフォルトが、IE7は「Web アーカイブ、単一のファイル (*.mht)」、IE6は「Web ページ、完全 (*.htm;*.html)」なので、これをいちいち変更しなければなりません。面倒臭。

IE7でShell.Windows().Item()が使えなくなったので、コンテキストメニュー拡張に変更します。

SaveAsHTML.htm

<html>
<head>
<script language=jscript defer>
var title=external.menuArguments.top.document.title;
if(title==""){
  a1.href=external.menuArguments.top.document.URL;
  title=new ActiveXObject("Scripting.FileSystemObject").GetFileName(decodeURI(a1.pathname));
}
title=title.replace(/[.:\\\/*?<>|"]/g,"_");
external.menuArguments.top.document.execCommand("saveas",true,title);
</script>
</head>
<body>
<a id=a1 ></a>
</body>
</html>

SaveAsHTML.reg

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\Web ページ、HTML のみ(&H)]
@="C:\\どこか\\SaveAsHTML.htm"

document.execCommand("SaveAs") は、旧ダイアログ「HTML ドキュメントの保存」です。
これでファイル名を指定しないと、「名前を付けて保存」と違って、URLからファイル名を生成します。
なので、コードのほとんどは、「名前を付けて保存」を真似て、タイトルからファイル名を生成するのに苦労しているだけです。:-(
なお、この場合、ie.ExecWB(OLECMDID_SAVEAS)を使っても結局は同じことです。

※ Vista IEの「保護モード:有効」のページでも使えます。

« IEで表示中のページのタイトルとURLをクリップボードにコピーする。 | トップページ | 「Web ページ、完全 (*.htm;*.html)」で「名前を付けて保存」する。 »