- PR -

複数ウィンドウで開いている各URLを取得

1
投稿者投稿内容
Flash
会議室デビュー日: 2004/04/15
投稿数: 5
投稿日時: 2004-04-16 00:17
お世話になっております。今回初めて書き込みいたします。

質問内容がjavascriptに関するものなので、ちょっと板違いかもしれませんがご容赦下さい。

社内用のイントラで使うシステムで苦労しているんですが、以下の事は可能でしょうか?

■複数のウィンドウが開いている場合に、
■現在開いている各ウィンドウで表示している各URLを取得して配列に格納する
 (実際はホスト名だけでよい)
■クライアントはIE6以上限定
■複数開いているウィンドウは、すべて同じプロセスのIEであるものとする
 (新規にブラウザを立ち上げるのではなく、Shift+クリックまたはCtrl+Nまたはwindow.openなどによって開かれた親子・兄弟状態のウィンドウ)


window.locationでできるのかな?
とも思いましたが、スクリプトが置かれているページ以外のアドレス(URL)に関する情報の取得の仕方が分かりません・・・
となたかお助けを・・・・
Cookie
ベテラン
会議室デビュー日: 2002/11/05
投稿数: 59
投稿日時: 2004-04-16 10:41
こんにちは。とりあえず知っていることだけ…

■現在開いている各ウィンドウで表示している各URLを取得して配列に格納する
 (実際はホスト名だけでよい)

→ document.Form[i]みたいにアプリケーション下のウインドウを取得出来ないかと
  試してみましたが、私が調べた範囲では見つかりませんでした。
  ウインドウのURLはwindowオブジェクトのlocationプロパティで取得出来るので、
   var w = window.open("test.html");
   alert(w.location);
  のような形で、取りたいwindowオブジェクトさえ特定出来ればアクセスは出来ますが
  不特定のwindowオブジェクトを取得するのは難しいのでは。

■クライアントはIE6以上限定

→ 上のコードで開いたウインドウでよそのホストのURLを開いてから
  locationプロパティを取ろうとすると、アクセス拒否のエラーが出ます。
  IE6からセキュリティの問題で、他のサイトのデータにアクセス出来なくなっているので
  URL取得時にtry-catchでカバーするしかないと思います。
  逆に言うと、身内のホストだけ取りたいのであれば、エラーなく取れればOKということだから
  try-catch構造をうまく応用出来ないでしょうか。

■複数開いているウィンドウは、すべて同じプロセスのIEであるものとする
 (新規にブラウザを立ち上げるのではなく、Shift+クリックまたはCtrl+Nまたはwindow.openなどによって開かれた親子・兄弟状態のウィンドウ)

→ 難しいと思うのですが、可能でしょうか?私は以前試して諦めてしまいました。
  ASP.NETなどでは、セッション情報が異なるとかで判断出来そうですけど…
  デフォルトで振られるウインドウ名とか何か使えないですかねー。
  (って何も考えずに言ってみるテスト)


なので、開かれているウインドウを全て取得して表示中のURLを取るというのは
スマートにはいかないと思います。
差し支えなければ、どんな目的でこの処理をしたいかも教えていただければ
他にもっといい手段があるかも。というか、その方がいい気もします。


★便乗して質問しますが、getElementById("mydiv_1")などのように、
 名称指定でウインドウオブジェクトを取得する手段ってありますか?
 ご存知の方お願いします。
He
大ベテラン
会議室デビュー日: 2002/12/18
投稿数: 141
投稿日時: 2004-04-16 10:51
引用:

Cookieさんの書き込み (2004-04-16 10:41) より:
★便乗して質問しますが、getElementById("mydiv_1")などのように、
 名称指定でウインドウオブジェクトを取得する手段ってありますか?
 ご存知の方お願いします。


IE限定ですが、こんな↓感じで。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6623&forum=7
Cookie
ベテラン
会議室デビュー日: 2002/11/05
投稿数: 59
投稿日時: 2004-04-16 11:16
>Heさん

あ、なるほど…。大変参考になりました。
「ブランク表示だけどウインドウは存在している」場合に
区別出来ないっぽいですけど、でもかなり画期的ですね。
勉強になりました。ありがとうございます。
Flash
会議室デビュー日: 2004/04/15
投稿数: 5
投稿日時: 2004-04-16 13:11
Cookieさん ご返答ありがとうございます。

--------------------------------------------------------
不特定のwindowオブジェクトを取得するのは難しいのでは。
--------------------------------------------------------


う〜ん、やはりそうですか・・・
状況を下記しますが、これができないとなると厳しいっぽいです。。。



[状況例説明]

(1)新規にブラウザを立ち上げて、社内のポータル(http://portal.hoge.co.jp)にアクセスします。

(2)ポータルの中のリンクをクリックして、Yahoo!JAPAN(http://www.yahoo.co.jp/)を開きます。(window.openで子ウィンドウで開く)

(3)今度はポータルの中の別のリンクをクリックして、社内の別システム(http://other.hoge.co.jp/index.html)を開きます。(これもwindow.openで子ウィンドウで開く)

(4)今度はさらに、(3)で開いたページの中にあるリンクを右クリックして、「新しいウィンドウで開く」で別のページ(http://other.hoge.co.jp/next.html)を開く。

(5)(4)と同様に、(3)のページから別ページを開く(http://other.hoge.co.jp/count.html)



こうした状況があった場合、開いたウィンドウは一つも閉じていないので、全部でウィンドウは5つになります。

やりたいことは、(5)で開いたページ上で、次の情報を取得して、ある処理を走らせたいのです。

===========================================================
other.hoge.co.jpのホスト名を含むURLを表示しているウィンドウ
の数がいくつなのか?を取得する。

上の例でいくと「3」という情報を取得したい。
===========================================================


今回は、(5)のページのみ新規で作成しようとしています。
既存の部分には、事情により、windowにname属性をつける等の変更はできません。
(other.hoge.co.jpのホストのシステムの中では、name属性のあるページと無いページが混在しています。例えば、上記例(4)のページにはname属性がありません。)


こんな感じなんですが、やはりちょっとムリっぽいですかねぇ;;
1

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