質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.12%

[JavaScript] WindowsシステムのHTTP認証処理が成功/失敗/中止されたことをJavaScriptから知りたい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,524

sayhorn

score 13

前提・実現したいこと

組み込み機器のソフト開発をしています。
この機器には設定用インタフェースとしてWebインタフェースが用意されています。
このWebページはHTTP認証で保護されており、ログイン時にはユーザー名とパスワードが必要です。
Windows7 でこのWebページにアクセスすると、「Windows セキュリティ」ダイアログが表示されます。
この「Windows セキュリティ」ダイアログが表示されたこと、およびこのダイアログでOK/キャンセル/閉じるのいずれかが選択されたことをJavaScriptから知りたいです。

発生している問題・エラーメッセージ

「Windows セキュリティ」ダイアログで、キャンセルを何度かクリックしてから正しい情報を入力してOKをクリックすると、Webページが一部正しく表示されません。
上記のタイミングを知ることができれば、そのタイミングでlocation.reload()するなど対策が取れると考えています。

ソースコード

ソースコードは記載できませんが、概要を記載します。
WebページはJavaScriptによって、機器と通信しながら動的に表示しています。
初期表示は window.onload イベントハンドラで表示処理を実装しています。
制限として、JavaScriptでHTTP認証処理自体を実装することはできません。
(技術的にというよりは、工数と工期の問題で難しいだろうと判断しています)

補足情報(言語/FW/ツール等のバージョンなど)

調べたところ、「Windows セキュリティ」ダイアログをキャンセルすると、そのたびにウィンドウフォーカスが元のWebページに戻り、そのたびにwindow.onloadの中に記述している処理が少しずつ進んでいました。
そして、3回ほどキャンセルするとwindow.onloadの処理は全て終了したことになっていますが、Webページの表示は一部不完全です(=現象の発生)。
たとえばですが、「Windows セキュリティ」ダイアログによるHTTP認証が失敗するか成功するまでの間は処理を停止するようなことができれば、その方法でも解決できそうです。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • takutok

    2015/06/09 15:44

    basic認証が終わってないのに、window.onloadが動くという部分が良くわかりませんでした。
    basic認証されているページが、<iframe>で埋め込まれているのでしょうか?
    ページ設計をどのようにされているのか教えてください。

    キャンセル

回答 2

checkベストアンサー

0

settimeoutは遅延時間0に指定する事で、「window.onloadの中に記述している処理が少しずつ進む」という現象を回避できるのでは?と思いました。

サーバサイドへのアクセスに関しては、コメントで明記されている通りです。

レイアウトくずれを回避するという事であれば、htmlは最初、非表示のdisplay:noneの状態にしておいて、onloadの最後の処理でDOM操作してやって表示してやれば回避できないでしょうか?


投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/14 23:14

    > chiku_様
    ご返信が遅れまして申し訳ありません。以下にご報告とお礼を申し上げます。

    settimeoutの件は結果的には効果がありませんでした。

    ただし、サーバサイドへのアクセスについては記載のとおり実装し、これによって「Webページが正しく表示されない現象」を回避することができました。
    通信をしてみればいいというのは、とてもシンプルな解ですが意外と気付けないものですね。私の経験値が低いからかもしれませんが。。。

    この度は貴重な気付きを与えていただきありがとうございました。
    chiku_様のアドバイスが直接の解決に繋がりましたので、ベストアンサーとさせていただきます。
    誠にありがとうございました。

    キャンセル

-1

現象を回避できるか分かりませんが、現状のwindow.onloadの処理をsettimeoutしてやる事で解決しませんでしょうか?
または、サーバーサイドではベーシック認証の情報を保持しているはずなので、Javascriptでサーバーサイドにアクセスしてベーシック認証済みかどうか判定できる情報を取得。これをsetintervalなどで行い、ベーシック認証済みかどうか判定を行うなど。。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/10 09:03

    > chiku_様
    アドバイスありがとうございます。
    settimeoutによる遅延は最初に検討しましたが、
    ユーザがどのタイミングでダイアログを操作するか、その結果がどうなるのか、また、システムがダイアログにフォーカスを当てている時間およびダイアログからフォーカスが外れている時間が確定できないため、遅延させる最適な時間が設定できないと考え、実施に至っていません。
    ※もっとも、リロードすれば正しくページが表示されるので「大体こうなるだろう」という予測をもって他の可能性を切り捨て、障害発生時はユーザ運用で回避するという選択は可能ですが、それは現実的な対策ということで今は度外視したいです。

    サーバサイドの情報にアクセスするということですが、処理としては(何でもいいからHTTPリクエストを投げるために)XHRでアクセスしてレスポンスのステータスコードを参照し、Unauthorizedなら更に処理を遅延し、OKなら処理を進めるようなイメージでしょうか?
    ※ちなみに、サーバサイドは組込み向けにチューンされたLinuxで、サービスはlighttpdで提供されています。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる