Javascriptから.NETへ値を渡す方法

VB Tips And Sample(HOME)VBプログラマの為のAjax入門

Javascriptから.NETへ値を渡す方法

WebBrowserのObjectForScriptingを使用する。
最近、GoogleMap上のポップアップから.NETアプリケーションへ値を渡して・・・と言うことを考えて調べていたら

MSのサンプルも載っていました。
で、そのサンプルをもっと単順にしたもの?です。
Javascriptから.NETへ値を渡す。
フォームにWebBrowser1を貼り付けて以下のコードでデバッグすると動くはず。※全角文字スペースは半角文字スペースに替えてください。


Imports System.Security.Permissions '必須

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'ObjectForScripting WebBrowser コントロールに表示される Web ページ内のスクリプト コードからアクセスできるオブジェクトを取得または設定します。By MSDN
        Me.WebBrowser1.ObjectForScripting = New Acces_From_Web 'クラスのインスタンスを渡す


        'HTMLドキュメント GoogleMapなどjavascriptを読み込んだものでもよい。
        '当然、PG外部の任意のURLをWebBrowserに表示させてもよい。
        'ポイントは
        '「window.external.[VBのパブリックルーチン]」
        'という形で、javascritから.NETアプリケーションにパラメータ・値を投げられることだと思う。
        '.NETからDOMの操作はできると想像がつくが、これでその逆もできることになる。
        Dim htmldoc As String

        htmldoc = "<!DOCTYPE html PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"">"
        htmldoc = htmldoc & vbCrLf & "<html lang=""ja"">"
        htmldoc = htmldoc & vbCrLf & "<head>"
        htmldoc = htmldoc & vbCrLf & "<meta http-equiv=""content-type"" content=""text/html; charset=Shift_JIS"">"
        htmldoc = htmldoc & vbCrLf & "<title>sample</title>"
        htmldoc = htmldoc & vbCrLf & "</head>"
        htmldoc = htmldoc & vbCrLf & "<script language=""JavaScript"" type=""text/javascript"">"
        htmldoc = htmldoc & vbCrLf & "<!--"
        htmldoc = htmldoc & vbCrLf & "function call_vb_sub(){"
        htmldoc = htmldoc & vbCrLf & " window.external.CallFromJavascript('called from script code');"
        htmldoc = htmldoc & vbCrLf & "}"
        htmldoc = htmldoc & vbCrLf & "// -->"
        htmldoc = htmldoc & vbCrLf & "</script>"
        htmldoc = htmldoc & vbCrLf & "<body>"
        htmldoc = htmldoc & vbCrLf & "<form action="" method=""post"" enctype=""multipart/form-data"" name=""vb1"">"
        htmldoc = htmldoc & vbCrLf & "<input type=""button"" name=""call_vb_sub_b"" value=""VBのサブルーチンをコールする"" onclick=""call_vb_sub()"">"
        htmldoc = htmldoc & vbCrLf & "</form>"
        htmldoc = htmldoc & vbCrLf & "</body>"
        htmldoc = htmldoc & vbCrLf & "</html>"
        WebBrowser1.DocumentText = htmldoc


    End Sub



End Class
'PermissionSet 複数の異なる種類のアクセス許可を格納できるコレクションを表します by MSDN
'SecurityAction.Demand  コール スタック内の上位にあるすべての呼び出し元に、現在のインスタンスによって指定されているアクセス許可が与えられていない場合は、実行時に強制的に SecurityException を呼び出します。by MSDN
'Name:="FullTrust" システムへのフルアクセス 参考http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_08/idnfw11_08_02.html
'ちなみにこれを書かなくても動く。MSのサンプルにはついている。

'ComVisibleAttribute 個々のマネージ型またはマネージ メンバ、またはアセンブリ内のすべての型の COM 参照可能範囲を制御します。by MSDN
'これは、マネージ型が COM から参照できることを示します。 by MSDN

<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
<System.Runtime.InteropServices.ComVisibleAttribute(True)> _
Public Class Acces_From_Web
    Public Sub CallFromJavascript(ByVal value As String)
        MessageBox.Show("これはjavascriptから呼ばれたメソッド" & vbCrLf & value)
    End Sub
End Class



VB Tips And Sample(HOME)VBプログラマの為のAjax入門