1

Awesomiumで実行中にYouTubeAPIの結果として生成されたときに、C#でJavaScriptイベントをキャプチャできますか?

Awesomiumブラウザにロードする次のHTMLがあります。

<body>
    <div id="player"></div>

    <script src="http://www.youtube.com/player_api"></script>
    <script>
        var player;

        function onYouTubePlayerAPIReady() {
            player = new YT.Player('player', {
                height: '390',
                width: '640',
                videoId: '0Bmhjf0rKe8',
                events: {
                    'onReady': onPlayerReady,
                    'onStateChange': onPlayerStateChange
                }
            });
        }

        function onPlayerReady(event) {
            event.target.playVideo();
        }

        function onPlayerStateChange(event) {
            if (event.data == 0) {
                alert('done');
            }
        }
    </script>
</body>

onPlayerStateChangeビデオ(またはそれによって生成された別のイベント)をC#にキャプチャして、ビデオが終了したときにアプリケーションが反応できるようにするにはどうすればよいですか?

4

3 に答える 3

2

Awesomium.NET 1.7 RCを使用している場合、これを行う手順は次のとおりです。

  • グローバルJavaScriptオブジェクトを作成します。見る:CreateGlobalJavascriptObject
  • カスタムメソッドをグローバルJSオブジェクトに追加し、それにバインドします。見る:JSObject.Bind
  • onPlayerStateChangeハンドラー内からカスタムメソッドを呼び出します。

    function onPlayerStateChange(event) {
        if (event.data == 0) {
            myGlobalObject.onPlayerStateChange();
        }
    }
    

(この例では、 myGlobalObjectという名前のグローバルJSオブジェクトを作成し、それにonPlayerStateChangeカスタムメソッドを追加したと想定しています。)

これにより、JavascriptMethodEventHandlerで定義したが起動しますJSObject.Bind

于 2013-02-01T21:32:01.410 に答える
0

私はawesomiumを本当に知らない(使用したことがない)ので、それを行う「ネイティブ」な方法があるかどうかはわかりませんが、ajaxを使用してプログラムにメッセージを送信するオプションは常にあります

ここHttpServerで説明するようにローカルを設定して、必要な通知を受け取ることができます。

単純なものを使用することもできTcpListenerます。これは非常に単純ですが、httpヘッダーを処理するためにいくつかの作業が必要になります(ただし、Web上のどこかでC#で記述されたクラスを見たと思いますが、そうではありません。 GETリクエストを管理するだけでよいため、非常に複雑です)。あなたがこれが行く方法であると思うなら、私はこの投稿の編集でもっと明確な何かを書くことができます。

とにかく、これがお役に立てば幸いです

于 2013-01-30T01:22:47.337 に答える
0

つまり、c#でjavascriptイベントをリッスンする必要があります。良い。

これは、Awesomium.NETを使用すると非常に簡単です。

awesomiumコントロールをフォームにドロップすると、デフォルトでオブジェクトが作成されます

webControl1

form_loadメソッドで、イベントハンドラーのようなdocument.readyを作成します。追加されたイベントは、ドキュメントの準備ができたときに呼び出されます。

webControl1.DocumentReady += webControl1_DocumentReady; 

c#からjavascriptメソッドを作成しましょう(たとえばmyGlobalObject.myMethod(){ })。スクリプトはawesomiumによってページに挿入されます。次に、関数がjavascriptから呼び出されるイベントをリッスンします。

このメソッドをから呼び出すこともできますonPlayerStateChange

function onPlayerStateChange(event) {
   myGlobalObject.myMethod();
}

これにより、javascriptイベントが発生すると、(myGlobalObject.myMethod();)c#で作成されたjavascriptメソッドが呼び出されます。

したがって、グローバルオブジェクトを作成してから、次のような関連メソッドを作成する必要があります。

using (JSObject myGlobalObject = webControl1.CreateGlobalJavascriptObject("myGlobalObject"))
        {
            // The handler is of type JavascriptMethodEventHandler. Here we define it
            // using a lambda expression.
            myGlobalObject.Bind("myMethod", true, (s, ee) =>
            {
                // Provide a response.
                ee.Result = "My response";
            });
        }

これにより、必要なjavascriptオブジェクトとメソッドがページに挿入されます。それで

webControl1_DocumentReadyメソッド(前に添付しました)で、

 void webControl1_DocumentReady(object sender, UrlEventArgs e)
        {


            dynamic myGlobalObject_ = (JSObject)webControl1.ExecuteJavascriptWithResult("myGlobalObject");
            using (myGlobalObject_)
            {
                myGlobalObject_.myMethod = (JavascriptMethodEventHandler)OnCustomJavascriptMethod;

            }
        }

次のようなOnCustomJavascriptMethodメソッドを作成する必要があります(たとえば)

private void OnCustomJavascriptMethod(object sender, JavascriptMethodEventArgs e)
        {
            MessageBox.Show("hi");
        }

このメソッド(OnCustomJavascriptMethod)は、javascriptイベントonPlayerStateChangeが呼び出されたときにc#で呼び出されます(myGlobalObject.myMethod();を呼び出すため)

それで全部です!onPlayerStateChangeが起動するのを待ち、c#のメソッドOnCustomJavascriptMethod(object sender、JavascriptMethodEventArgs e)が呼び出されるため、javascriptが「controlC#メソッド」になります。

awesomiumの詳細については、https: //awesomium.com/を参照してください。Windows用のSDKをhttp://awesomium.com/downloads/awesomium_1_7_0_sdk_win.exeからダウンロードして開始できます。

于 2013-04-25T20:32:12.523 に答える