- PR -

onLoad時以外でボタンを自動クリックしたい

1
投稿者投稿内容
kshr
常連さん
会議室デビュー日: 2004/04/20
投稿数: 28
お住まい・勤務地: 滋賀
投稿日時: 2004-06-08 14:42
ASP.NET(VB)でWebAppの開発を行っており
普段はWindowsAppが主な案件でWebに関して知らない事ばかりの
素人です・・・が、どうかご教授お願いいたします。

JavaScriptを組み込みつつ利便性を上げたいという目的で行き詰まりました。
色々と調べていると、onLoadでLoad完了後にボタン等、クリック可能とあったのですが、

今回は、いつもかも自動でボタンを押してしまうと
不都合な点が発生してしまうため。
FormLoad時に処理を行い、ボタンクリックを自動で行う場合にのみ

RegisterStartupScript("hoge", "<Script ・・・・・・</Script>")
としようかと思っているのですが、、色々調べたのですが、
解決方法がわからい為投稿させて頂きました。

「Java Solution会議室」に投稿したのですが、
ASP.NETで行う為、[Webサーバ・コントロール]Buttonである事から
こちらに、投稿いたしました。

JavaScriptの本などには
document.form1.BtnName.Click();
と記述すればいいとなっているのですが、
構文ErrorになりScriptが動作いたしません。

認証情報をクッキーで管理している為、ReDirect先が該当ページではないのが
問題なのかと思い、通常のページでもテストしてみましたが、動きませんでした。
どうか、ご教授よろしくお願いいたします。


所々!?
結構な個所で日本語がおかしいです。。。
読みにくいですがよろしくお願いします。

[ メッセージ編集済み 編集者: kshr 編集日時 2004-06-08 14:47 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-08 14:57
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12177&forum=12

 JavaScriptとJavaは、名前は似ているけれど別物なので、Java Solutionで聞いても無駄かと。。。


 で、質問が読みにくいのですが
[質問]
1.Webアプリケーションで、ユーザの操作性向上を目指してJavaScriptを組み込んだ。特定の処理を行うときは、ページを表示した直後に特定のボタンをクリックすることが多いので、onLoadイベントにて、Scriptによってボタンをクリックさせようと思う。

2.しかし、このページは他の処理を行うときにも表示される為、表示されたからといってボタンをクリックされるわけにはいかない。その為、サーバ側処理で、クリックさせるときのみRegisterStartupScriptメソッドにて、スクリプトを登録しようと思う。

3.色々調べたが、解決方法がわからない。

4.JavaScriptの本などでは、"document.Form1.BtnName.Click();"と記述すればよいと書いてあるが、構文Errorとなり、スクリプトが動作していない。
[/質問]
てなところでしょうか?日本語が変と思い、せっかく編集するなら、少なくとも自分が変と思わない程度に修正してください。←母国語が日本語でないなら失礼

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-06-08 14:58 ]
kshr
常連さん
会議室デビュー日: 2004/04/20
投稿数: 28
お住まい・勤務地: 滋賀
投稿日時: 2004-06-08 15:41
母国語は日本語です。
以後、気をつけますm(_ _)m

Jittaさんいつもご返答ありがとう御座います。

書き直して頂いた内容の通りです。

【蛇足】
今回のシステムではグループウェア上へリンクを張り起動させます。
起動時にグループウェア提供のシングルサインオン処理を行います。
ここで、例外があります。
お気に入り・Url直接入力時には当システムで認証を行う必要があります。

ここで、普段からLogOn画面は表示してしまい
LogOn画面のFormLoad処理でシングルサインオン処理を行います
A1:シングルサインオン可能
  ID/Passを自動入力する
  自動で、認証ボタンをクリック(認証クッキー発行)
A2:シングルサインオン不可
  ID/Passの入力画面を表示しイベント待ち
  ユーザー操作で認証ボタンをクリック(認証クッキー発行)
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-08 17:41
引用:

kshrさんの書き込み (2004-06-08 15:41) より:


 ID/Passwordは、グループウェアからもらえるんですよね?そして、実装しようとしているページは、.aspxなんですよね?それなら、サーバ側でもらったID/Passwordを設定して、redirectなり、transferすれば良いのでは?
MERCY
常連さん
会議室デビュー日: 2003/12/16
投稿数: 24
投稿日時: 2004-06-08 18:09
VBだとよくわからないですが・・・・・
C#だと
aspxで
<body id="bodytag" MS_POSITIONING="GridLayout" runat="server">
csで
protected HtmlGenericControl bodytag;

って宣言しておいて

bodytag.Attributes["onLoad"]="document.forms[1].BtnName.Click();";

bodytag.Attributes["onLoad"]="document.forms[1].submit();";
でいいかと思います。

----
JavaScriptのコードが間違えてましたので修正しました。

[ メッセージ編集済み 編集者: MERCY 編集日時 2004-06-08 18:41 ]
kshr
常連さん
会議室デビュー日: 2004/04/20
投稿数: 28
お住まい・勤務地: 滋賀
投稿日時: 2004-06-08 18:28
[quote]
Jittaさんの書き込み (2004-06-08 17:41) より:
[/quote]

15:41分投稿分の補足をしつつ質問に対する答え

A1:シングルサインオン可能時

この場合、LogOnページでは
--- FormLoadイベント ---
ID入力TextBoxへIDを挿入
Password入力TextBoxへPasswordを挿入
RegisterStartupScriptメソッドにて、スクリプトの出力
------------------------
★認証(LogOn)画面が表示される★
ScriptによるButtonクリック
--- Button_Clickイベント ---
認証情報格納クッキーが発行され
Indexページへ
------------------------


A2:シングルサインオン不可時

この場合、LogOnページでは
--- FormLoadイベント ---
初期化処理のみ
------------------------
★認証(LogOn)画面が表示される★
【Userの操作】
UserIDの入力
Passwodの入力
認証ボタンのクリック
--- Button_Clickイベント ---
認証情報格納クッキーが発行され
Indexページへ
------------------------

たしかに、LogOn画面のFormLoadで認証を行い、確認OKならReDirect
を行うへばいいのですが、FormLoadが終了しないイコール
UserへLogOn画面が出力できずに、数秒止まるという事になりますよね?

シングルサインオン可/不可に関係なく
認証(LogOn)画面を表示したいが為に、わざわざ「RegisterStartupScript」
を使用し、Buttonをクリックできないかと思い、投稿させて頂きました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-08 18:46
 登録するスクリプトを、別出しにしてみましょうか。

forward.js:
function goForward(targetName) {
// IE, NN で、共通に使用できる(バージョン注意)
var target = document.getElementById(targetName);
if (!target) return;
target.click();
}

Page.OnLoad:
RegisterStartupScript("forward"
, String.Format("<script>goForward('[0]');</script>"
, submitButton.ClientID));

???.aspx:
<script type="text/javascript" src="forward.js"></script>

#forwardのスペルミス修正

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-06-09 08:50 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-09 09:25
ページの構成を、次のようだと仮定する

wwwroot
 |−AppRoot
 | |−index.aspx … アプリケーションのポータルページ
 | |−loginForm.aspx … 認証用ページ
 | |−menu.aspx … アプリケーションのメニューページ
 | |−web.config

web.configの構成を、一部次のようにする
コード:
<system.web>
  <authentication mode="Forms">
    <forms loginUrl="loginForm.aspx" 他、適宜 />
  </authentication>
  <authorization>
    <deny users="?" />
  </authorization>
</system.web>
<location path="index.apsx">
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</location>


これで、index.aspxには認証なしでアクセスできるようになる。他のページ(.aspxファイル)は認証しなければ表示できない。

 index.aspx.vbの、Page_loadで、次のように処理する。
コード:
if (Request.UrlReferre = 特定のアドレス) Then
  認証チケット発行
  Response.Redirect("menu.aspx");
End If



引用:

たしかに、LogOn画面のFormLoadで認証を行い、確認OKならReDirectを行うへばいいのですが、FormLoadが終了しないイコールUserへLogOn画面が出力できずに、数秒止まるという事になりますよね?


 redirectは、いったんクライアントへ出力を返します。したがって、『FormLoadが終了しない』というのとは、ちょっと違います。しかし、「やっぱりこっちのページを見てよ」というメッセージをレスポンスし、ユーザエージェントが「わかった、そのページちょうだい」と投げ返すので、『数秒間止まる』というのは該当します。しかし、その止まっている時間が、「ページを表示する為にかかる時間」なのか、「再取得しようとしている時間」なのかは、ユーザにはわかりません。
 もし気になるようなら、Response.Writeで簡単なHTMLを書き出してフラッシュし、それからredirectを発行すると、「認証済み。メニューへ移動中」の様なメッセージを表示させることはできるかもしれません。
1

スキルアップ/キャリアアップ(JOB@IT)