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
|