• 締切済み

WebBrowser上でjavascriptを追加するには

表題でご存知の方いらっしゃいましたらお願いします。 現在ExcelのVBAからWebBrowserを使っています。 最終的な目的は「WebBrowser上でクリックした画像のURLを クリップボードに保存したい」ですが、いろいろとその前段階で沈没寸前です。 WebBrowserのイベントに該当するものもなく、また開いているページの イベントも拾う方法がわかりませんで、 調べた結果、JavaScriptと連携させることを思いました。 既存のWebページを開いて、そこにJavascriptを埋め込んでと 思ったのですが、できません。 厳密にはinnerhtmlで追記できたのですが、無反応です。 そこでJscriptなども試しましたがイベントを検知できるやり方ができませんでした。 Javascriptを埋め込む方法をご存知の方、または別のアプローチが 有るという方どうぞお願いします。

みんなの回答

  • seastar3
  • ベストアンサー率69% (99/142)
回答No.3

 Azzz_さん、とりあえず抽出できるようになり、おめでとうございます。実は自作HTML以外を対象にIEオブジェクトを操作したことがないので、WebBrowserのプロパティ(変数名)とメソッド(命令)はよく知りません。  一応、参考URLのアドバイス情報を見つけましたので、参考にして下さい。私が目を通した限りでは、多少ややこしそうですね。  WebBrowser本体をHtmlElementに取り込ませて、マウス動作を報告させながら、目的の状態になったときにリンク先を取り出せばよいようです。  WebBrowserのプロパティをダンプしながら、ふさわしいタイミングでイメージタグの情報を呼び出せるように根気強くテストしてみて下さい。

参考URL:
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=29269&forum=7
Azzz___
質問者

お礼

ありがとうございます。 URLは結構敷居が高いですね(涙!) ちょっと頑張ってみますが、同時に別方法として バックグランドで一度画像をすべてPCにダウンロードして それを再度Imageコントロールで取得してという手段も検討中です。 また何かあればお願いします。 ありがとうございました。

  • seastar3
  • ベストアンサー率69% (99/142)
回答No.2

済みませんが、添字に矛盾があることに気がつきました。 イメージオブジェクトは0番から始まるのでnを0からLength-1でループさせます。 For n = 0 To Me.WebBrowser1.Document.images.Length - 1 Set objIMG = Me.WebBrowser1.Document.images(n) JouhouIMG = objIMG.Title & vbCRLF JouhouIMG = objIMG.src MggBox JouhouIMG Next  セルへの埋め込みは1つ増やして Cells(n + 1, 1) = objIMG.Title Cells(n + 1, 2) = objIMG.src が1行目からになります。

Azzz___
質問者

補足

回答ありがとうございます。 ご指摘の方法も試してみました。 一部修正してできました。 ただ質問にも挙げました、「選んだ画像のみ」のURLが拾いたいのですが 可能でしょうか? (説明の仕方が悪いかもしれませんが、これ(クリックした画像を検知)を実現するにはJavascriptが 必要かと思っていますが、これも思いこみかもしれません) 引き続きましてお願い致します。

  • seastar3
  • ベストアンサー率69% (99/142)
回答No.1

 マウスのイベントドリブンはちょっと分からないので、イメージオブジェクトの抽出プログラムを挙げてみます。 For n = 1 To Me.WebBrowser1.Document.images.Length Set objIMG = Me.WebBrowser1.Document.images(n) JouhouIMG = objIMG.Title & vbCRLF JouhouIMG = objIMG.src MggBox JouhouIMG Next  つまり、このブックのウェッブブラウザ1の中のイメージオブジェクトを順番に取り出しては、タイトルとこのURLを表示させる繰り返し処理です。  表示ではなくセルへ埋め込むときは、 Cells(n, 1) = objIMG.Title Cells(n, 2) = objIMG.src をループの中に追加すれば、アクティブシートのA列に画像名、B列にURLを埋めた表ができます。したがってその一覧表から該当するURLを選りだして使うことになります。

関連するQ&A

  • WebBrowserコントロールでページが閉じられたことを検出したい

    こんにちは。いつもありがとうございます。 .net初心者です(しかもVB) 今回も質問です。 javascript等でwebbrowserが閉じられた場合にそれを検出したいのですが、どのようにしたらよいでしょうか? ネット上で調べたところWindowClosingというイベントがあるみたいですが、私の使っているものにはないみたいでした。 なくなってしまったのでしょうか?VisualBasic2008です。 ちなみに複数タブでページを開けるタブブラウザを作っているのですが、 scriptでページが閉じられた際、見た目上はなにも起こりませんが、 別のタブに移動してからまたその(閉じられたページの)タブに戻ろうとすると、タブは移動しているもののタブページ内のブラウザは表示されません。 (さもページが透明になってしまったかのように前に見ていたページがそのまま表示されている状態です。) これを、タブも一緒に閉じたいのでなんとかWebBrowserコントロールが閉じられたことを検知したいと思っています。 ページが閉じられる際に、WebBrowserのdisposedイベントが呼ばれているかと思って試してみましたが、呼ばれていないようでした。 なにかいい案がありましたらよろしくお願いします。

  • C#2008でWebBrowserコントロールからJavaScriptで生成されたForm値に値をセットするには

    VisualStadio2008でC#で開発しています。 .netframework標準のwebBrowserでいろいろなページに値をセットして結果を取得するアプリを作っていて 通常のHTMLのページであれば webBrowser.Document.All.GetElementsByName("hoge")[0].InnerText = "hoge"; など値をセットしたり取得したりすることができます。 しかしFORM部分をJavaScriptから動的にHTMLを作成している(と思われる)ページに対しては上記の方法で取得することができませんでした。 また試しにGetElementsByTagName("form")とかGetElementsByTagName("input")とかでFOR文でぐるぐる回して探してみましたが該当するデータは見当たらず javaScriptで動的に生成された部分はwebBrowserから取得できない仕様のようです。 そこで質問なのですがなんとかしてこの動的に生成されたFORMに値をセットしてSUBMITする方法ってないでしょうか? webBrowser上に目で見ればはっきり見えてるのに操作ができなくて朝から行き詰ってます。 よろしくお願いいたします。

  • webbrowserでクリックさせないようにしたい

    [言語:C#] [環境:Visual Studio 2005 Express] webbrowserに表示させたページ、あるいはフラッシュに対するクリックを無効に出来ないでしょうか? 可能ならば、WEBページに対するクリックは無効にした上で、 別のマウスイベント(ドラッグでウインドウの移動等)を行えるようにしたいのですが、何か方法はあるでしょうか?

  • [C#]webbrowserのstop()について

    C#のwebbrowserのstopはどういったことをしてくれるんでしょうか? ググると、一番わかりやすいのが 『保留中のナビゲーションをキャンセルし、バックグラウンド サウンドやアニメーションなどの動的なページ要素をすべて停止します。』 ウェブページをwebbrowserで読み込むと、いらないページ(広告ページなど)を読み込むので、 指定のページが読み込み終わったら、もう他のは読み込まないとしたいのですが、うまくいきません。 webbrowser1.Navigated("http://www.yahoo.co.jp") でアクセスして、 webBrowser1_DocumentCompleted のイベントの中に、 if (e.Url == "http://www.yahoo.co.jp"){ webbrowser1.stop();} と書いたのですが、それ以降も読み込んでいます。。。 ただ、これを書いたほうが確かにいつもより読み込みページ数が少なくなるような気がします。 調査の仕方としては、 webBrowser1_DocumentCompleted が発生した時のe.Urlと時間(DateTime.Now)を調査して、 http://www.yahoo.co.jpを読み込んだあとに、まだ続いて広告などを読み込んでしまいます。 textBox1.Text += e.Url.ToString() + "[" + DateTime.Now + "]\r\n"; というふうに書いて見ています。 狙いとしては、http://www.yahoo.co.jpが読み込み終わったら、webbrowserの残されている読み込みページを読まずに、終了して欲しいのです。 文書がわかりにくくて済みません。 ヒントでもいいので教えていただけると助かります。

  • 正しいWebBrowserの使い方(ループ判定)

    VB2008を使っています。WebBrowserのコンポーネントを使って ホームページにGET形式でパラメータを渡して画面のBODY部分を読み取る ものを作っているのですが、サーバーのレスポンスにもよりますが 1分間に20回で5分(100回程度)連続アクセスをするのですが、 以下のルーチンの場合何か不安を感じまして、 ネットでこれを使えばOKというものが無くて 確実に読み取る方法が知りたくて質問いたしました。 やはり、2つ目のイベントを用いる方が安心でしょうか? 正しいWebBrowserの使い方(ループ判定)をご存知の方教えてください。 '***** WebBrowser1.ReadyState ***** WebBrowser1.Navigate(URL) Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete Or WebBrowser1.IsBusy = True Application.DoEvents() Loop data = WebBrowser1.DocumentText '***** DocumentCompletedイベントまでループ ***** public wait_flag as Boolean wait_flag = True WebBrowser1.Navigate(URL) Do While (WebBrowser1.IsBusy = True) Or (wait_flag = True) Application.DoEvents() Loop data = WebBrowser1.DocumentText '---- イベント ----- Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted wait_flag = False End Sub

  • Javascriptとの連携について

    JavascriptからFlashへの連携について,いろいろ勉強しているのですが 解決できない(不明な箇所がある)ので,質問させていただきます。 やりたいことは,Javascriptから変数を送り,Flash内で受け取り, ムービークリップの大きさや位置を変更してみたいのです。 Javascriptからは,勉強の意味もあり最初は定数として Inputボタンを押すと,ムービークリップが変倍や移動を, 最終的に目指しているのは,変数にして(フォームから入力)して, 自動的にムービークリップが変倍,移動するというものです。 そもそも間違っているのかもしれませんが,ムービークリップの インスタンス名ををSetVariableを使う際に指定しても動作しないため, 深みにはまりつつあります。 ご存じの方がいらっしゃいましたら,是非,ご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • javascriptに関して

    javascriptに関して document.getElementById("greeting").innerHTMLという一文があるのですが、 サンプルを書いても.innerHTMLの意味がよくわかりません・・。 サンプルコード内で.innerHTMLを抜いてしまった場合エラーが出てしまったので、 必須のプロパティであることは認識しているのですが、 このプロパティはどのようなものなのでしょうか? ご存じの方がいらっしゃいましたらお願い致します。

  • WebBrowserでHtmlを取得

    WebBrowserでHtmlを取得する方法をおしえてください フォーム上に、WebBrowser1、TextBox1、Button1を配置しています。 TextBox1にHtmlを表示し、Button1は、WebBrowser1に表示している WEBページを更新します。 やりたい事  (1)フォームを開いた時に、URLで指定したWEBページを表示させ   TextBox1にHtmlを表示させる。  (2)Button1をクリックした時、表示しているWEBページを更新する。   更新後のHtmlをTextBox1に表示させる。  (3)TextBox1の表示が完了したらHtmlを処理する。(未着手) 現在、(1)は動作するのですが、(2)が動作しません(TextBox1のHtmlが更新されない) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load WebBrowser1.Navigate(オッズURL):webcompflag = False Do While (webcompflag = False) System.Windows.Forms.Application.DoEvents() System.Threading.Thread.Sleep(10) Loop TextBox1.Text = WebBrowser1.Document.Body.InnerHtml End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = "" If Not WebBrowser1.Url.Equals("about:blank") Then WebBrowser1.Refresh() : webcompflag = False Do While (webcompflag = False) System.Windows.Forms.Application.DoEvents() System.Threading.Thread.Sleep(10) Loop TextBox1.Text = WebBrowser1.Document.Body.InnerHtml End Sub 何がいけないのか分かりません よろしくお願いします。

  • WebBrowser1.Document.Body.InnerHtmlで得る sizset と sizset というのは何でしょう?

    vb2008のwebbrowser1で表示されているページを WebBrowser1.Document.Body.InnerHtml で取得しました。 もともとのHTMLと比較してタグが大文字になったり、タグ内の要素の順番が入れ替わったり、要素の"や'がなくなったりすることは確認しています。 気になるのはタイトルにある"sizset"と"sizset"が追加されている点です。 この2つの意味するところが判りません。 もともとのHTMLに存在しないものなので、消しちゃえばいいのですが…。 検索エンジンで調べても情報が見あたらず、何の目的で付加されるのか疑問です。 ご存知でしたらお教えください。 よろしくお願いします。

  • WebBrowser 内のボタンをクリックし、引数を渡したい。

    WebBrowser 内のボタンをクリックし、引数を渡したい。 WebBrowser コントロールを使用していて Windows アプリからページ内のボタンをクリックする方法について質問です。 以下のボタンが html で定義されているとして、 <input type = "button" id = "button1" onclick="javascript:foo();" /> HtmlElement element = null; element = webBrowser1.Document.GetElementById("button1"); element.InvokeMember("click"); こうすると、javascript の foo() が実行されます。 本題はここからなんですが、 この関数fooに引数を渡したいのです! 例えばfooの定義を var foo=function(arg) { alert(arg); } として、アプリ側から、 element.InvokeMember("click","this is test"); のようにすれば動くかと思ったのですが、だめでした。 方法をご存知のかた、ご教授願います!

    • ベストアンサー
    • HTML

専門家に質問してみよう