C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ブラウザでのリンククリック時、IEで対象URLを開きたい


(過去ログ 110 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■65453 / inTopicNo.1)  ブラウザでのリンククリック時、IEで対象URLを開きたい
  
□投稿者/ えーす (1回)-(2013/02/27(Wed) 12:10:20)

分類:[.NET 全般] 

初めて利用させて頂きます。

えーす、と申します。


実現可能かどうか、という所からの判断となるかと思いますが、皆様のお知恵を拝借したい内容を記載させて頂きます。



「GoogleChromeを利用して開いたページ内でリンクをクリックした際に、対象リンクを開くブラウザを指定したい(IEで開きたい)。」


上記のような要件があり、実装の方向としては常駐型のクライアントアプリを作成し、対象URLがブラウザから開かれようとした際は、ブラウザを指定して開くようにしたい、と考えています。

ただ、自分で実装したブラウザではなく、開かれているChrome上でのリンク押下のイベントをそもそもハンドル出来るのか。

方向としてはWindows32APIやPowerShellなどを利用するような形になるのか?と考えているのですが、調べてもあまり良い情報が得られません。



開発環境としてはC#.NET(VS2010)を利用しての開発を想定しております。



何かご教授頂ける情報をお持ちの方がいらっしゃれば、アドバイスを頂けませんでしょうか。

宜しくお願い致します。
引用返信 編集キー/
■65455 / inTopicNo.2)  Re[1]: ブラウザでのリンククリック時、IEで対象URLを開きたい
□投稿者/ pang2 (10回)-(2013/02/27(Wed) 13:50:20)
> 「GoogleChromeを利用して開いたページ内でリンクをクリックした際に、対象リンクを開くブラウザを指定したい(IEで開きたい)。」

任意のページでリンク先のブラウザを指定したいということですか?
用途が見えないですが。。

自前のページに特定のアプリをリンクしたいということであれば、「URLスキーム」とか。


> ただ、自分で実装したブラウザではなく、開かれているChrome上でのリンク押下のイベントをそもそもハンドル出来るのか。

外部から捕らえるのは無謀かと。
chromeプラグインで、内部から捕らえるのはおそらく可能です。
引用返信 編集キー/
■65457 / inTopicNo.3)  Re[2]: ブラウザでのリンククリック時、IEで対象URLを開きたい
□投稿者/ えーす (3回)-(2013/02/27(Wed) 14:15:51)
pang2様


ご返答ありがとうございます。


> 任意のページでリンク先のブラウザを指定したいということですか?
> 用途が見えないですが。。

IEでしか動作しないページ等があり、Chrome内でそのリンクがクリックされたらブラウザをIEに変えてリンク先を表示したい、というのが用途となります。


> 外部から捕らえるのは無謀かと。
> chromeプラグインで、内部から捕らえるのはおそらく可能です。

エクステンションも幾つか探してみましたが、フリーソフトでそういった物に類似するようなものが幾つかありました。

ただ、Win7以外で利用するとChromeがクラッシュした、というような報告が過去あったりしたため、躊躇しています。

最悪の場合はそちらしかないか、とは思うのですが・・・。



プロセスから取得出来るデータも色々階層辿ってみましたがURL情報は持っていないみたいですね。

最悪、Chromeに該当するプロセスを全て洗って該当URLがあれば常駐アプリからIEでURLを起動する、というような実装が出来るかな、とも思っていたのですが・・・。



No65455 (pang2 さん) に返信
>>「GoogleChromeを利用して開いたページ内でリンクをクリックした際に、対象リンクを開くブラウザを指定したい(IEで開きたい)。」
>
> 任意のページでリンク先のブラウザを指定したいということですか?
> 用途が見えないですが。。
>
> 自前のページに特定のアプリをリンクしたいということであれば、「URLスキーム」とか。
>
>
>>ただ、自分で実装したブラウザではなく、開かれているChrome上でのリンク押下のイベントをそもそもハンドル出来るのか。
>
> 外部から捕らえるのは無謀かと。
> chromeプラグインで、内部から捕らえるのはおそらく可能です。
引用返信 編集キー/
■65459 / inTopicNo.4)  Re[3]: ブラウザでのリンククリック時、IEで対象URLを開きたい
□投稿者/ pang2 (11回)-(2013/02/27(Wed) 16:17:34)
> IEでしか動作しないページ等があり、Chrome内でそのリンクがクリックされたらブラウザをIEに変えてリンク先を表示したい、というのが用途となります。

別ブラウザではなく、Chrome の IE Tab は駄目ですか?
IE Tab Multi を入れると特定の URL を IE Tab で開くように指定できるようです。

引用返信 編集キー/
■65460 / inTopicNo.5)  Re[4]: ブラウザでのリンククリック時、IEで対象URLを開きたい
□投稿者/ えーす (4回)-(2013/02/27(Wed) 16:24:10)
pang2様

再度のご回答ありがとうございます。


> 別ブラウザではなく、Chrome の IE Tab は駄目ですか?
> IE Tab Multi を入れると特定の URL を IE Tab で開くように指定できるようです。

IE Tab、IE Tab Multiについてもエクステンションで見つけてはいたのですが、導入しているアプリケーション自体がIEでのサポートのみを明示しているため、カスタムブラウザ(恐らくIE Tabはカスタムブラウザだと思うのですが)はなるべく利用したくは無い、という状況です。


自作での対応も困難な場合は、デスクトップに別途ショートカットを作成して、そのシステムを利用する場合はショートカットをクリックする、という方法で逃げるしかないかなと考えてはいるのですが。。。


No65459 (pang2 さん) に返信
>>IEでしか動作しないページ等があり、Chrome内でそのリンクがクリックされたらブラウザをIEに変えてリンク先を表示したい、というのが用途となります。
>
> 別ブラウザではなく、Chrome の IE Tab は駄目ですか?
> IE Tab Multi を入れると特定の URL を IE Tab で開くように指定できるようです。
>
引用返信 編集キー/
■65462 / inTopicNo.6)  Re[5]: ブラウザでのリンククリック時、IEで対象URLを開きたい
□投稿者/ キム (8回)-(2013/02/27(Wed) 18:37:48)
No65460 (えーす さん) に返信

IEtabで十分な気がしますが、ご自分で制御したいということなら、chromeのエクステンションを作成するのが早道かと思います。
chrome extensionsの公式サイト(http://developer.chrome.com/extensions/docs.html)にいけば情報は得られます。
chromeのエクステンションは作ったことがないので憶測ですが、URLの指すページの表示時に特定の処理を行うのも可能ではないでしょうか。

どうしても外部から処理したいということなら、グローバルフックを仕掛ける必要があると思うので、C#では不可能だと思います。

chromeのアドレスバーに現在表示されているURLを知るだけならC#でも出来なくはないです。
VS2010付属のSpy++を使って調べるとわかりますが、chromeのアドレスバーのウィンドウクラス名は"Chrome_OmniboxView"です。
そして、ウィンドウキャプションがURLです。
よって、このウィンドウクラス名を持つウィンドウを検索して、キャプションを取得すればよいです。

※chromeのアドレスバーのウィンドウクラス名が将来変更されないという保証はありません。
※アドレスバーの現在の値が取れるだけなので余り役に立たないです。
引用返信 編集キー/
■65465 / inTopicNo.7)  Re[1]: ブラウザでのリンククリック時、IEで対象URLを開きたい
□投稿者/ Azulean (106回)-(2013/02/27(Wed) 22:35:46)
No65453 (えーす さん) に返信
> 上記のような要件があり、実装の方向としては常駐型のクライアントアプリを作成し、対象URLがブラウザから開かれようとした際は、ブラウザを指定して開くようにしたい、と考えています。

すでに出ているように対象のブラウザアプリの機能拡張として作ることができなければ、事実上、実現不可能です。
既存の機能拡張(エクステンション)にないのであれば、機能拡張の SDK などを参照して、実現可否を判断してください。


ブラウザアプリはレンダリング速度向上などのために、かなり特殊な作り方をしていることが多いので、一般の Windows デスクトップアプリのように、ボタンクリックをフックして検出するといったことは、ほぼ無理だと思います。
仮にアドレスバーの変化を検知したとしても、それは「開き始めたタイミング」であり、「開こうとした際(開き始める前)のタイミング」ではありませんので、少しタイミングがずれます。(容認できるのならよいですが、Chrome と IE の両方で開くような結果になると予想される)
引用返信 編集キー/
■65469 / inTopicNo.8)  Re[6]: ブラウザでのリンククリック時、IEで対象URLを開きたい
□投稿者/ えーす (5回)-(2013/02/28(Thu) 09:41:01)
キム様

ご回答ありがとうございます。


やはり外部からのフックは難しいようですね。

Chrome extensionsは私の方も作ったことがないので、そちらで実現出来そうか内容を見てみたいと思います。


> chromeのアドレスバーに現在表示されているURLを知るだけならC#でも出来なくはないです。
> VS2010付属のSpy++を使って調べるとわかりますが、chromeのアドレスバーのウィンドウクラス名は"Chrome_OmniboxView"です。
> そして、ウィンドウキャプションがURLです。
> よって、このウィンドウクラス名を持つウィンドウを検索して、キャプションを取得すればよいです。

この場合、一度開いている状態のURLを取得することになるので、別途ブラウザで開いた後に対象のChromeタブのプロセスを終了させるなどで実現出来なくは無さそうですね。。。

御提示頂きました方法も一度試してみたいと思います。


色々御提示頂きましてありがとうございました。


No65462 (キム さん) に返信
> ■No65460 (えーす さん) に返信
>
> IEtabで十分な気がしますが、ご自分で制御したいということなら、chromeのエクステンションを作成するのが早道かと思います。
> chrome extensionsの公式サイト(http://developer.chrome.com/extensions/docs.html)にいけば情報は得られます。
> chromeのエクステンションは作ったことがないので憶測ですが、URLの指すページの表示時に特定の処理を行うのも可能ではないでしょうか。
>
> どうしても外部から処理したいということなら、グローバルフックを仕掛ける必要があると思うので、C#では不可能だと思います。
>
> chromeのアドレスバーに現在表示されているURLを知るだけならC#でも出来なくはないです。
> VS2010付属のSpy++を使って調べるとわかりますが、chromeのアドレスバーのウィンドウクラス名は"Chrome_OmniboxView"です。
> そして、ウィンドウキャプションがURLです。
> よって、このウィンドウクラス名を持つウィンドウを検索して、キャプションを取得すればよいです。
>
> ※chromeのアドレスバーのウィンドウクラス名が将来変更されないという保証はありません。
> ※アドレスバーの現在の値が取れるだけなので余り役に立たないです。
引用返信 編集キー/
■65470 / inTopicNo.9)  Re[2]: ブラウザでのリンククリック時、IEで対象URLを開きたい
□投稿者/ えーす (6回)-(2013/02/28(Thu) 09:46:10)
2013/02/28(Thu) 19:36:07 編集(投稿者)
2013/02/28(Thu) 19:36:02 編集(投稿者)

Azulean様

ご回答頂きましてありがとうございます。


> 仮にアドレスバーの変化を検知したとしても、それは「開き始めたタイミング」であり、「開こうとした際(開き始める前)のタイミング」ではありませんので、少しタイミングがずれます。(容認できるのならよいですが、Chrome と IE の両方で開くような結果になると予想される)

自作サイトでのイベントのようにイベントをハンドル出来ない以上、上記のような動作になるのは仕方ないかなとは考えていました。
そのため上記のような方法でも可能なのであれば、同時に開いたあとでプロセスを片方終了させる、というような処理で何とか出来ないかな、と思っていました。


ただ、皆様から回答頂いた中で、やはりやりたい事の実現は常駐型のC#アプリ形式では無理だろう、ということで個人的に感じています。

ひとまずExtensionsのほうで何か対応ができないか検討するようにして、今回御質問させて頂いた内容についてはクローズさせて頂きたいと思います。



ご回答頂きました皆様、大変ありがとうございました。



No65465 (Azulean さん) に返信
> ■No65453 (えーす さん) に返信
>>上記のような要件があり、実装の方向としては常駐型のクライアントアプリを作成し、対象URLがブラウザから開かれようとした際は、ブラウザを指定して開くようにしたい、と考えています。
>
> すでに出ているように対象のブラウザアプリの機能拡張として作ることができなければ、事実上、実現不可能です。
> 既存の機能拡張(エクステンション)にないのであれば、機能拡張の SDK などを参照して、実現可否を判断してください。
>
>
> ブラウザアプリはレンダリング速度向上などのために、かなり特殊な作り方をしていることが多いので、一般の Windows デスクトップアプリのように、ボタンクリックをフックして検出するといったことは、ほぼ無理だと思います。
> 仮にアドレスバーの変化を検知したとしても、それは「開き始めたタイミング」であり、「開こうとした際(開き始める前)のタイミング」ではありませんので、少しタイミングがずれます。(容認できるのならよいですが、Chrome と IE の両方で開くような結果になると予想される)
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -