フォームを送信して戻るとフォームの入力データが消える問題を回避する。
掲示板に書き込んだり、フォームを送信するとき、パラメタエラーなどで、前に戻ると入力データが消えていて、再度一から入力し直す、なんてことがあります。
リンクを開くときは、シフト+クリックやコンテキストメニューで「新しいウィンドウで開く」ことができます。
しかし、フォームの送信ボタンには、「新しいウィンドウで開く」がありません。
そこで、IEのコンテキストメニューを拡張し、メモリ中のソースを<form target="_blank">のように書き換えます。
これにより、フォーム送信時、現在のページを残して、フォーム送信後を「新しいウィンドウで開く」ことができます。
フォームの送信前に、ページ上で右クリックして、コンテキストメニューから、「ターゲット変更(@)」を選択します。
TargetNew.htm
<object id=sc classid=clsid:0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC>
<param name=language value=vbscript>
<param name=allowui value=true>
</object>
<script language=vbscript defer>
sc.addcode "function messagebox(s,b,t):messagebox=msgbox(s,b,t):end function"
r=sc.run("messagebox",external.menuArguments.top.document.forms.length,vbYesNoCancel+vbDefaultButton2,"Change All Targets ? Y(all) N(prompt) Cancel(none)")
If r<>vbCancel Then
For Each form In external.menuArguments.top.document.forms
If r=vbYes Then
form.target="_blank"
Else
Select Case sc.run("messagebox",Join(Array(form.action,form.target,form.outerHTML),vbLf),vbYesNoCancel+vbDefaultButton2,"Change Target ?")
Case vbYes
form.target="_blank"
Case vbCancel
Exit For
End Select
End If
Next
If Not IsObject(form) Then call sc.run("messagebox","更新終了",vbOkOnly,"Target Changed.")
End If
</script>
TargetNew.reg
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\ターゲット変更(&@)]
@="C:\\どこか\\TargetNew.htm"
そのままでは、MsgBox()が使えないので、ScriptControlの小技を使います。
WScript.ShellのPopUp()も使えたり使えなかったりするので使いません。
« 「テキスト ファイル (*.txt)」で「名前を付けて保存」する。 | トップページ | フォームを送信して戻るとフォームの入力データが消える問題を回避する。(その2) »