none
C#(ClickOnce)からHTMLのJavascriptを呼び出す方法について RRS feed

  • 質問

  • はじめまして。

    C#開発初心者です。
    適切な表現でない、また情報不足な点が多数あるかと思いますが、ご容赦ください。

    タイトルの通り、C#で作成しClickOnceで配布したアプリケーションから、ある開かれたブラウザ内のJavascriptを起動する方法を探しています。
    具体的なやりたいこと・操作の流れ・環境は以下の通りです。

    【やりたいこと】
     ・C#アプリケーションの処理が完了またはエラーが発生した際、
      ブラウザ側にその処理結果を通知し、対応する画面へ遷移させたい

    【操作の流れ】
     ・あるWebアプリケーション(Java & jspで作成)を起動し、そのブラウザからClickOnceで配布したC#アプリケーションを呼び出す
      ※呼び出し方法はJavascriptからC#アプリケーションへリンクするような形にしています
         <サンプルソース>
        function callCApp()
           {
               location.href = 'C#アプリケーションのパス';
           }

     ・C#アプリケーションの処理が完了した後、ブラウザ内の何らかJavascriptを呼び出す

    【環境】
     ・OS            : Windows XP 、Windows Vista 、Windows 7
      ・ブラウザ      : IE 6、7、8、9  ※ただし、ActiveXは使用できないものとする


    そもそも、すべてC#で作成すれば問題ないのでは等のご意見もあるかと思いますが、
    できれば上記環境のまま実現したいと思っていります。

    自分なりに調べた限りでは、Processクラスを使用してどうにかならないかと思っていたのですが、
    知識・スキルがないため八方塞がりとなっております。

    ぜひ、ご教授をよろしくお願いいたします。
    なお、不明点等ありましたら、都度補足させていただきます。

    よろしくお願いいたします。

    2012年5月29日 3:11

回答

  • クライアントアプリケーションを呼び出すことはできていると仮定してある開かれたブラウザ内のJavascriptを起動する方法はあります。

    やりたいことに対して大げさな気がしますが、クライアントアプリケーションから OLEオートメーション を使うと IE 上の Javascript を実行できるようです。

    下記URLはVBAでの例ですがこれをC#で書き直すかwshで書いてC#から呼び出せばよいと思います。

    http://www.macrogirls.net/iesamplecode/vbaie_day3_1.html

    このサンプルで

     MsgBox htdoc.Title          '<title>タグ
        MsgBox htdoc.body.innerHTML '<body>タグの内側のHTML
    となっている部分を

    htdoc.parentWindow.execScript "test()"

    とすれば、ブラウザ上のスクリプトの test 関数を実行することができました。

    IE側でwsh(ActiveX)を使えたら単純な処理で済んでしまうのですが。


    http://systemartlaboratory.com/

    • 回答の候補に設定 山本春海 2012年6月6日 8:55
    • 回答としてマーク 山本春海 2012年6月12日 8:16
    2012年5月30日 9:03

すべての返信

  • ActiveXはダメって書いてあるけれど、例えばSilverlightもダメですか?

    ClickOnceアプリケーションで特定ポートをバインドした後に、SilverlightからSocket通信して、問題なければSilverlightのDOM連携でページを移動させる。ってのはやったことがあります。

    ただし、Silverlight5ではIE6に対応していないので、Silverlight4以下である必要があります。Sivlerilght4が必須となる場合は、Silverlightの各バージョンのサポート情報(http://support.microsoft.com/gp/lifean45/ja)も確認しておくといいです。


    • 編集済み かるあ 2012年5月29日 7:22
    2012年5月29日 7:21
  • ActiveXはダメって書いてあるけれど、例えばSilverlightもダメですか?

    ClickOnceアプリケーションで特定ポートをバインドした後に、SilverlightからSocket通信して、問題なければSilverlightのDOM連携でページを移動させる。ってのはやったことがあります。

    ただし、Silverlight5ではIE6に対応していないので、Silverlight4以下である必要があります。Sivlerilght4が必須となる場合は、Silverlightの各バージョンのサポート情報(http://support.microsoft.com/gp/lifean45/ja)も確認しておくといいです。


    かるあ さま

     さっそくのご返信、ありがとうございます。
     Silverlightでそのようなことができるのですね・・・

     文章にあるキーワード(Socket通信、DOM連携)の意味をわかっておりませんので、さっそく調べて検討してみます。

     ただ、今回のシステム要件を踏まえて、できればSilverlightも用いずに実現できればと思っております。 教えて頂いた方法とあわせて、また調査してみます。
     ありがとうございます。

    2012年5月29日 7:44
  • 前提条件として、既に開いているWebページ上のJavaScriptを実行したいのでしょうか…?
    2012年5月30日 0:00
  • 前提条件として、既に開いているWebページ上のJavaScriptを実行したいのでしょうか…?


    佐祐理 さま

     その通りです。

     処理の流れは
       Webアプリケーションの起動 → C#アプリケーションの実行  →  既に開かれているWebアプリケーション内のJavascriptを実行
     という形で実現したいと思っております。

    2012年5月30日 0:06
  • 新たにページを開く方法なら思い当りますが、既に開いているページの制御となると難しいですね…。
    2012年5月30日 0:10
  • クライアントアプリケーションを呼び出すことはできていると仮定してある開かれたブラウザ内のJavascriptを起動する方法はあります。

    やりたいことに対して大げさな気がしますが、クライアントアプリケーションから OLEオートメーション を使うと IE 上の Javascript を実行できるようです。

    下記URLはVBAでの例ですがこれをC#で書き直すかwshで書いてC#から呼び出せばよいと思います。

    http://www.macrogirls.net/iesamplecode/vbaie_day3_1.html

    このサンプルで

     MsgBox htdoc.Title          '<title>タグ
        MsgBox htdoc.body.innerHTML '<body>タグの内側のHTML
    となっている部分を

    htdoc.parentWindow.execScript "test()"

    とすれば、ブラウザ上のスクリプトの test 関数を実行することができました。

    IE側でwsh(ActiveX)を使えたら単純な処理で済んでしまうのですが。


    http://systemartlaboratory.com/

    • 回答の候補に設定 山本春海 2012年6月6日 8:55
    • 回答としてマーク 山本春海 2012年6月12日 8:16
    2012年5月30日 9:03
  • こんにちは、nk_satoshi さん。
     
    MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。
    しばらく経ちましたが、その後いかがでしょうか。
    参考になるアドバイスをいただいているように思われましたので、勝手ながら私のほうで一旦回答としてマークさせていただきました。
    アドバイスくださったみなさん、情報ありがとうございます。

    いただいた情報の中で、解決に役立った投稿や、参考になる情報など有効な情報には回答としてマークすることをお願いしています。
    今後、同じ問題でこのスレッドを参照される方にも、有効な情報を活用いただけるかと思いますので、ご協力よろしくお願いいたします。
    一旦回答としてマークさせていただきましたが、気になることなどあればご質問を続けてくださいね。

    今後とも、MSDN フォーラムのご利用をよろしくお願いいたします。それでは。
    ____________                                                 
    日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海

    2012年6月12日 8:16