今、ウエブブラウザコントロールを使用していますが、以下のジャバスクリプトの記述されたリンク先を取得するにはどうしたらよいでしょうか
<a onclick="javascript:set_target(0);" id="List_l02_name" href="javascript:__doPostBack('List$l02$name','')">
ちなみに、javascript:__doPostBack('List$l02$name','')の部分をIEの
アドレスの所に貼り付けたらリンク先が表示されたのですが、このアドレスをWebBrowser.Navigate メソッドで設定しても、ページを取得出来ないみたいです。
宜しくお願いします。
具体的な目的としては「このリンクをクリックした結果表示されるページのURLを、クリックせずに(遷移せずに)プログラムで取りたい」ってことでよろしいでしょうか?
それ前提で進めるので違っていたらごめんなさい。
まずこれってASP.NETのページじゃないででしょうか?
そうなるとポストバックの挙動を理解する必要があるかと。
ポストバックはHTMLの挙動としては単純に自分にPOSTしてるだけ(PostBackUrl指定している場合はそっちへ)なので、JavaScriptを解析してそのアドレスを追ってもあまり意味がない。
処理の結果どう遷移するかはサーバー再度の処理(場合によってはそれに組み合わされたクライアント再度の処理)に掛かっており、多くはリダイレクトで別ページに飛ばす。
つまり、実際に遷移させてみるまで、クライアントサイドだけではリンク先を取得することは不可能な場合があるということ。
ASP.NETのページが自分で作ったものであるなら、どこか別の場所にHiddenFieldを置いてそこにURLを書いておいてあげるとかの方がいいかも。
そうじゃない場合は要件を見直した方がいいかもです。
無理矢理取るために見えないところで遷移させるにしても、サーバー側にリクエストを送るという行為自体がその後の挙動に影響しないとは言えない、その操作自体の是非も考える必要があるためです。
※例えばデータベースが絡む画面であれば、遷移自体がデータに影響与える可能性がある
こういうところを念頭に置いて、再度要件練った方が良いかと思います。
私も似たような処理を依頼されたことがあり、その時はASP.NET側も別チームが作っていたので、クライアントサイドに移動先のページを渡すHiddenFieldを置いてもらって対応しました。
-----
アドレスバーに貼り付けて動作したのは、表示中のページを使用して動作したため、__doPostBack が正常に動作したと思われます。
サーバーサイドの処理も走ったのではないかと思います。
Navigateメソッドでも同様な結果になるはずですが、メソッドを呼んだ際は既に該当ページはロード済み(readyState=='complete')でしたか?
ページをロードせずに単にNavigateメソッドを呼んだしていないでしょうか。
-----
何にしても前提が違っていたら外れている話ですので、そのあたりも確認してください
すみません、先の文中に書き間違いがありました。
7行目
×処理の結果どう遷移するかはサーバー再度の処理(場合によってはそれに組み合わされたクライアント再度の処理)に掛かっており、多くはリダイレクトで別ページに飛ばす。
○処理の結果どう遷移するかはサーバーサイドの処理(場合によってはそれに組み合わされたクライアントサイドの処理)に掛かっており、多くはリダイレクトで別ページに飛ばす。
下から5行目
×ページをロードせずに単にNavigateメソッドを呼んだしていないでしょうか。
○ページをロードせずに単にNavigateメソッドを呼んだりしていないでしょうか。
訂正します。
前提はまさにその通りです。よく知りませんが、ASP.NETのページなのですね、とりあえず検証確認してみます。
編集 削除同じ様な依頼をされていたのですね、なんだか嬉しいですね。
ページをロードせずに単にNavigateメソッドを呼んだりしていました。
HiddenFieldの方は検証していませんが、とりあえず出来たので、ナビゲートメソッドで取得しようと思います。