- PR -

VB.NETで作ったユーザーコントロール上のボタンをクリックしたことを、HTML(JavaScript)で検知したい

投稿者投稿内容
TKEZ
会議室デビュー日: 2007/09/18
投稿数: 8
投稿日時: 2007-10-30 09:56
VB.NETでユーザーコントロールを作成し、それをブラウザ上で動作させるアプリを作成しています。
その中で、ユーザーコントロール上でボタンを押した、ということをJavaScriptで検知する必要が出てきました。

いろいろ検索してみたところ、
「VB側でイベントを定義しRaiseEventでイベントを発生させる。Javascriptでそれをキャッチできる。」
という説明をされている箇所がありました。

そこで次のようなコードを作ったのですが、ボタンをクリックしてもJavaScript側で検知できませんでした。
書き方が悪いのか、そもそもの前提が間違っているのか、どなたかご教示いただけますでしょうか。
よろしくお願いいたします。


1)VB.NETで作ったユーザーコントロール側
コード:
Imports System.Runtime.InteropServices

<GuidAttribute("3BFA828A-CBEA-4344-B343-XXXXXXXXXXXX")> <System.Serializable()> _
Public Class UserControl1
    
    Public Event MyEvent()

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        RaiseEvent MyEvent()
    End Sub
End Class




2)HTML側
コード:
<html>
<body>
<object classid="clsid:3BFA828A-CBEA-4344-B343-XXXXXXXXXXXX" id="xobj">
</object>

<script type="text/javascript" for="xobj" event="myevent">
alert("MyEvent(JavaScript)");	// これが呼び出されない
</script>
</body>
</html>

まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-10-30 14:45
引用:

いろいろ検索してみたところ、
「VB側でイベントを定義しRaiseEventでイベントを発生させる。Javascriptでそれをキャッチできる。」
という説明をされている箇所がありました。


出典はどこですか?
TKEZ
会議室デビュー日: 2007/09/18
投稿数: 8
投稿日時: 2007-10-31 09:38
まるくさん

ありがとうございます。
出典は、
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19873&forum=12&8
になります。

よろしくお願いいたします。
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-10-31 11:40
この辺が参考になりませんかね。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpguide/html/cpconraisingeventshandledbycomsink.asp
mito
ベテラン
会議室デビュー日: 2002/05/17
投稿数: 50
投稿日時: 2007-10-31 20:01
IEや.Netのセキュリティーで実行できてないとかありませんか?

・[HOWTO] マネージ Visual Basic .NET イベントを Internet Explorer スクリプトでシンクする方法
http://support.microsoft.com/kb/316516/ja
TKEZ
会議室デビュー日: 2007/09/18
投稿数: 8
投稿日時: 2007-11-01 20:39
まるくさん、mitoさん

ありがとうございます。
やってみてまた報告します。
TKEZ
会議室デビュー日: 2007/09/18
投稿数: 8
投稿日時: 2007-11-06 11:34
結論を先に言いますとうまくいかなかったため、代案を採用しました。

まず、mitoさんが教えてくれたリンクから
HOW TO: Sink Managed C# Events in Internet Explorer Script
という記事を見つけました。
そのものずばりだったので、言語はC#でしたがまったくそのとおりにコードを作成しました。
しかし、JScriptで記述されたイベントハンドラが呼び出されませんでした。

また、同様にcaspol -s off でフレームワークのセキュリティがoffにできるとのことでしたので、やってみましたが挙動は変わりませんでした。

検証できる時間もなくなってしまいましたが、現時点でJavaScriptからVB.NETのプロパティが読めることが分かっているので、結局JavaScriptのsetTimeoutで数ミリ秒ごとにプロパティを読み出すことで代用することにしました。
解決できずに申し訳ありません。

ありがとうございました。
mito
ベテラン
会議室デビュー日: 2002/05/17
投稿数: 50
投稿日時: 2007-11-06 20:02
動きませんでしたか・・・
私の環境では以下でJavascriptが動きます。何が違うのでしょうか?

MyControl1.vb
<ComClass(MyControl1.ClassId, MyControl1.InterfaceId, MyControl1.EventsId)> _
Public Class MyControl1

Public Const ClassId As String = "bbd7c37b-bea0-4dc6-818a-xxxx"
Public Const InterfaceId As String = "94330c5f-40bc-4153-b930-xxxx"
Public Const EventsId As String = "c8b99ba9-f102-445c-badc-xxxx"

Public Event MyButtonClick()

Private Sub Button1_Click(略) Handles Button1.Click
RaiseEvent MyButtonClick()
End Sub

Public Sub New()
' この呼び出しは、Windows フォーム デザイナで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
End Sub

End Class

Test.htm
<HTML>
<HEAD>
<SCRIPT TYPE="text/javascript" For="MyCtl" Event="MyButtonClick">
alert("OK");
</SCRIPT>
</HEAD>
<BODY>
<OBJECT ID="MyCtl" CLASSID="clsid:bbd7c37b-bea0-4dc6-818a-xxxx" WIDTH="186" HEIGHT="146">
</BODY>
</HTML>

環境:
Win2KSp4+IE6.0Sp1
VS2005Sp1(HTMファイルはローカルに置いてます)

スキルアップ/キャリアアップ(JOB@IT)