2017年9月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
無料ブログはココログ

« 「テキスト ファイル (*.txt)」で「名前を付けて保存」する。 | トップページ | フォームを送信して戻るとフォームの入力データが消える問題を回避する。(その2) »

2008年6月 9日 (月)

フォームを送信して戻るとフォームの入力データが消える問題を回避する。

掲示板に書き込んだり、フォームを送信するとき、パラメタエラーなどで、前に戻ると入力データが消えていて、再度一から入力し直す、なんてことがあります。

リンクを開くときは、シフト+クリックやコンテキストメニューで「新しいウィンドウで開く」ことができます。
しかし、フォームの送信ボタンには、「新しいウィンドウで開く」がありません。

そこで、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) »