ブラウザについて への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 るきお  (社会人)
投稿日時
2012/4/23 13:10:38
ひょっとして、
リンクをクリックして新しいウィンドウとして開いた場合に、クリックしたリンク先が表示されずにプログラムで既定のURLに設定しているページが表示されてしまう。
ということでしょうか?
そうであれば、新しいウィンドウを開く手段がhref属性のあるアクティブな要素によるものだとすれば、私が投稿したコードのFormのLoadイベントでクリックしたURLに自動的に遷移するようにしているはずですがうまく機能しませんか?
href属性があるアクティブな要素によらないポップアップだとすればこの手法では対応できません。
どのような手段で新しいウィンドウが開こうとしているでしょうか?
リンクをクリックして新しいウィンドウとして開いた場合に、クリックしたリンク先が表示されずにプログラムで既定のURLに設定しているページが表示されてしまう。
ということでしょうか?
そうであれば、新しいウィンドウを開く手段がhref属性のあるアクティブな要素によるものだとすれば、私が投稿したコードのFormのLoadイベントでクリックしたURLに自動的に遷移するようにしているはずですがうまく機能しませんか?
href属性があるアクティブな要素によらないポップアップだとすればこの手法では対応できません。
どのような手段で新しいウィンドウが開こうとしているでしょうか?
投稿者 るきお  (社会人)
投稿日時
2012/4/23 13:06:19
>新しいウィンドウを開いたときに、最初のページが表示されてしまうのですが
>どうすれば、そのページを新しいウィンドウで開けるのでしょうか?
困っていることとやりたいことがよくわからないです。
>新しいウィンドウを開いたとき
とは、前の投稿にあるProcess.Start(Application.ExecutablePath, url)を使って新しくプログラムを起動したときということでよろしいでしょうか?
>最初のページ
これはなんのことか検討もつきません。
IEに設定しているホームページを指していますか?
>そのページ
これも検討がつきません。最初のページのことではないと思いますが、
他に「その」が指す言葉が文中に見当たらないようです。
>HttpUtility.UrlEncodeではなく,Uri.EscapeDataString使えばClient Profileでも使えますし,
>参照設定の追加もいらないと思うのですが……。
思いつきませんでした。ご指摘ありがとうございます。
それから、
試していませんが、理屈上新しいページを開くタイミングでアクティブな要素に目的のURLを記したhref属性がないとこの手法は失敗しますのでugonightさんが使いたいシーンで役に立つかどうかは十分に試してみてください。
たとえば、多分JavaScriptからポップアップを開くような動作だとこの仕組みはうまく動かないと思います。
>どうすれば、そのページを新しいウィンドウで開けるのでしょうか?
困っていることとやりたいことがよくわからないです。
>新しいウィンドウを開いたとき
とは、前の投稿にあるProcess.Start(Application.ExecutablePath, url)を使って新しくプログラムを起動したときということでよろしいでしょうか?
>最初のページ
これはなんのことか検討もつきません。
IEに設定しているホームページを指していますか?
>そのページ
これも検討がつきません。最初のページのことではないと思いますが、
他に「その」が指す言葉が文中に見当たらないようです。
>HttpUtility.UrlEncodeではなく,Uri.EscapeDataString使えばClient Profileでも使えますし,
>参照設定の追加もいらないと思うのですが……。
思いつきませんでした。ご指摘ありがとうございます。
それから、
試していませんが、理屈上新しいページを開くタイミングでアクティブな要素に目的のURLを記したhref属性がないとこの手法は失敗しますのでugonightさんが使いたいシーンで役に立つかどうかは十分に試してみてください。
たとえば、多分JavaScriptからポップアップを開くような動作だとこの仕組みはうまく動かないと思います。
投稿者 ugonight  (中学生)
投稿日時
2012/4/22 17:38:38
あ、新しいウィンドウを開いたときに、最初のページが表示されてしまうのですが
どうすれば、そのページを新しいウィンドウで開けるのでしょうか?
どうすれば、そのページを新しいウィンドウで開けるのでしょうか?
投稿者 ugonight  (中学生)
投稿日時
2012/4/22 17:11:05
有難うございます
皆さんのおかげでどちらもうまくいきました♪
検索はUri.EscapeDataStringを使わせていただきました
皆さんのおかげでどちらもうまくいきました♪
検索はUri.EscapeDataStringを使わせていただきました
投稿者 YuO  (社会人)
投稿日時
2012/4/22 16:51:42
HttpUtility.UrlEncodeではなく,Uri.EscapeDataString使えばClient Profileでも使えますし,
参照設定の追加もいらないと思うのですが……。
参照設定の追加もいらないと思うのですが……。
投稿者 るきお  (社会人)
投稿日時
2012/4/22 16:11:11
>コンパイラの詳細設定というのは
はい。合っています。
>'HttpUtility' は 'Web' のメンバーではありません。というエラーが出てきてしまいました。
System.Webに参照設定をしていないのではないでしょうか?
>InternetExplorerが起動してしまうので、そこで起動しているアプリケーション自体を起動したいということです。
過去の投稿のxvmmさんのアイディアを使うと次のようになります。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9359
ポイントは
の部分ですが、新しいウィンドウを開くいろいろな状況のどの部分にまで対応できているか確認はできていません。
ちょっと試してみたところ、ハイパーリンクを右クリック→「新しいウィンドウで開く」や、target="_blank"の場合うまく動作するようです。
この件は過去にも何回か出ており、正攻法での攻略は難易度が高いです。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=10230
はい。合っています。
>'HttpUtility' は 'Web' のメンバーではありません。というエラーが出てきてしまいました。
System.Webに参照設定をしていないのではないでしょうか?
>InternetExplorerが起動してしまうので、そこで起動しているアプリケーション自体を起動したいということです。
過去の投稿のxvmmさんのアイディアを使うと次のようになります。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9359
Public Class Form1
Private Sub WebBrowser1_NewWindow(sender As System.Object, e As System.ComponentModel.CancelEventArgs) Handles WebBrowser1.NewWindow
e.Cancel = True
Dim url As String = sender.Document.ActiveElement.GetAttribute("href")
Process.Start(Application.ExecutablePath, url)
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
If My.Application.CommandLineArgs.Count = 0 Then
Return
End If
Dim url As String = My.Application.CommandLineArgs(0)
WebBrowser1.Navigate(url)
End Sub
End Class
ポイントは
Dim url As String = sender.Document.ActiveElement.GetAttribute("href")
の部分ですが、新しいウィンドウを開くいろいろな状況のどの部分にまで対応できているか確認はできていません。
ちょっと試してみたところ、ハイパーリンクを右クリック→「新しいウィンドウで開く」や、target="_blank"の場合うまく動作するようです。
この件は過去にも何回か出ており、正攻法での攻略は難易度が高いです。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=10230
投稿者 ugonight  (中学生)
投稿日時
2012/4/22 14:59:37
ご丁寧に有難うございます
コンパイラの詳細設定というのは
で大丈夫なんでしょうか?
教えていただいたコードをもとに、Enterキーを押したらテキストボックスに入力されている値を検索しようと思って
としたところ'HttpUtility' は 'Web' のメンバーではありません。というエラーが出てきてしまいました。
クラスを生産するとエラーが増える一方です、どうすればいいでしょうか…
あいまいな表現を使って申し訳ありません
自分を起動するのは、ご推測通りですが、新しいウィンドウを開くときというのは、たとえばここでの記事を編集するときに上部に「投稿で使用できるコードの説明」というところをクリックすると別ウィンドウで開きますよね?
そうすると、InternetExplorerが起動してしまうので、そこで起動しているアプリケーション自体を起動したいということです。
新しいウィンドウを開こうとしていることを取得したり、新しく起動したアプリケーションのwebbrowserコントロールをnavegateすることはできるのでしょうか
コンパイラの詳細設定というのは
で大丈夫なんでしょうか?
教えていただいたコードをもとに、Enterキーを押したらテキストボックスに入力されている値を検索しようと思って
Private Sub ToolStripTextBox2_KeyUp(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles ToolStripTextBox2.KeyUp
If e.KeyCode = Keys.Enter Then
Using internet As New Net.WebClient
Dim utf8 = System.Text.Encoding.UTF8
Dim keyword = ToolStripTextBox2.Text
Dim encodedKeyword = Web.HttpUtility.UrlEncode(keyword)
Dim query = "http://search.yahoo.co.jp/search?fr=yjdnqp&p=" & encodedKeyword & "&ei=UTF-8"
Dim result As Byte()
result = internet.DownloadData(query)
WebBrowser1.DocumentText = utf8.GetString(result)
End Using
End If
End Sub
としたところ'HttpUtility' は 'Web' のメンバーではありません。というエラーが出てきてしまいました。
クラスを生産するとエラーが増える一方です、どうすればいいでしょうか…
あいまいな表現を使って申し訳ありません
自分を起動するのは、ご推測通りですが、新しいウィンドウを開くときというのは、たとえばここでの記事を編集するときに上部に「投稿で使用できるコードの説明」というところをクリックすると別ウィンドウで開きますよね?
そうすると、InternetExplorerが起動してしまうので、そこで起動しているアプリケーション自体を起動したいということです。
新しいウィンドウを開こうとしていることを取得したり、新しく起動したアプリケーションのwebbrowserコントロールをnavegateすることはできるのでしょうか
投稿者 るきお  (社会人)
投稿日時
2012/4/22 13:42:41
訂正します。
最初の投稿の2つ名の例の下記行は不要でした。
試しているときにエンコード方式の勘違いして書いた不要なコードを消し忘れてしまいました。
この行はあってもなくても動作は同じです。
最初の投稿の2つ名の例の下記行は不要でした。
Dim b() As Byte = utf8.GetBytes(keyword)
試しているときにエンコード方式の勘違いして書いた不要なコードを消し忘れてしまいました。
この行はあってもなくても動作は同じです。
投稿者 るきお  (社会人)
投稿日時
2012/4/22 13:38:58
>あと、新しいウィンドウを開くときに、自分を新しく起動させることができると聞いたのですがどうやってやるのでしょうか?
これは何を言っているのかわかりません。
「新しいウィンドウを開くとき」とはどういうときでしょうか?「ボタンをクリックしたとき」や「フォームが開いたとき」なら意味がわかるのですが。「フォームが開いたとき」という意味でしょうか?
>自分を新しく起動させる
「自分」とはなんでしょうか?
たとえば、Windows フォーム アプリケーションでボタンをクリックしたときに実行しているアプリケーション自体をもう1つ起動するには下記のようにします。
これは何を言っているのかわかりません。
「新しいウィンドウを開くとき」とはどういうときでしょうか?「ボタンをクリックしたとき」や「フォームが開いたとき」なら意味がわかるのですが。「フォームが開いたとき」という意味でしょうか?
>自分を新しく起動させる
「自分」とはなんでしょうか?
たとえば、Windows フォーム アプリケーションでボタンをクリックしたときに実行しているアプリケーション自体をもう1つ起動するには下記のようにします。
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Shell(Application.ExecutablePath, AppWinStyle.NormalFocus)
End Sub
投稿者 るきお  (社会人)
投稿日時
2012/4/22 13:32:57
まず、Yahoo!検索の使用例です。
ugonightさんが、挙げているURLは普通にブラウザーからYahoo検索で検索した場合のURLの説明のようです。
半角英数のみのキーワードであれば下記のプログラムでOKです。
全角文字がある場合はエンコードの必要があるので多少手間があります。ugonightさんが、Windows フォーム アプリケーションを使っていると仮定します。VB2005の場合は下記のプログラムをそのまま実行すればうまくいきます。
VB2008以降であれば、コンパイラの詳細設定で対象のフレームワークに「.NET Fremewark xx Client Profile」と書いてある部分を変更し、「.NET Framework xx」にします。たとえば、「.NET Framework 4 Client Profile」を「.NET Framework 4」に変更します。そのあとでSystem.Webに参照設定をして下記コードを実行すると結果が取得できます。
なお、上記の2つのサンプルはネットワーク構成がシンプルな場合の例です。プロキシーを経由している場合などは追加のコードが必要になります。
ugonightさんが、挙げているURLは普通にブラウザーからYahoo検索で検索した場合のURLの説明のようです。
半角英数のみのキーワードであれば下記のプログラムでOKです。
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Using internet As New Net.WebClient
Dim utf8 = System.Text.Encoding.UTF8
Dim keyword = "VB"
Dim query = "http://search.yahoo.co.jp/search?fr=yjdnqp&p=" & keyword & "&ei=UTF-8"
Dim result As Byte()
result = internet.DownloadData(query)
WebBrowser1.DocumentText = utf8.GetString(result)
End Using
End Sub
全角文字がある場合はエンコードの必要があるので多少手間があります。ugonightさんが、Windows フォーム アプリケーションを使っていると仮定します。VB2005の場合は下記のプログラムをそのまま実行すればうまくいきます。
VB2008以降であれば、コンパイラの詳細設定で対象のフレームワークに「.NET Fremewark xx Client Profile」と書いてある部分を変更し、「.NET Framework xx」にします。たとえば、「.NET Framework 4 Client Profile」を「.NET Framework 4」に変更します。そのあとでSystem.Webに参照設定をして下記コードを実行すると結果が取得できます。
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Using internet As New Net.WebClient
Dim utf8 = System.Text.Encoding.UTF8
Dim keyword = "Visual Basic 中学校"
Dim b() As Byte = utf8.GetBytes(keyword)
Dim encodedKeyword = Web.HttpUtility.UrlEncode(keyword)
Dim query = "http://search.yahoo.co.jp/search?fr=yjdnqp&p=" & encodedKeyword & "&ei=UTF-8"
Dim result As Byte()
result = internet.DownloadData(query)
WebBrowser1.DocumentText = utf8.GetString(result)
End Using
End Sub
なお、上記の2つのサンプルはネットワーク構成がシンプルな場合の例です。プロキシーを経由している場合などは追加のコードが必要になります。
投稿者 ugonight  (中学生)
投稿日時
2012/4/21 15:41:15
↑を利用して、テキストボックスに入力された文字列で検索するプログラムを作ろうかと思っているのですが、使い方が全く分かりません…
よろしければ使い方を教えてください
あと、新しいウィンドウを開くときに、自分を新しく起動させることができると聞いたのですがどうやってやるのでしょうか?
よろしければ使い方を教えてください
あと、新しいウィンドウを開くときに、自分を新しく起動させることができると聞いたのですがどうやってやるのでしょうか?
お騒がせしましたすみません。