- PR -

window.openでポップアップウィンドウが開かないことがある

投稿者投稿内容
ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2006-09-21 16:31
Webアプリケーションの導入先で、window.open によるポップアップが開かないことがある現象が起きて困っています。

問題が起きるクライアント端末は特定の物に限られているようですが、「常に開かない」のではなく、「開く場合もあれば開かない場合もある」という状態です。

使用しているブラウザは全てIE6ですが、パッチ適用状態は不明です。

ポップアップを起動する元はHTMLのa要素です(都合により文字,URL,関数名は一部変更してあります)。
コード:
  <a href="javascript:OpenSubWin()">
    <img src="/app/Img/sikaku.gif" border="0" alt="□" width="9" height="9">&nbsp;<b>ポップアップ</b>
  </a>


JavaScriptの関数 OpenSubWin の定義は
コード:
function OpenSubWin() {
	w = window.open("","mini","top=0,left=0,width=screen.width height=screen.height resizable=yes");
	w.document.location.href="/app/Popup/popup.jsp";
}


となっています。

全く開かないのであれば設定の問題の可能性が高いのですが、時々成功するという状態なので今ひとつ原因がわかりません。
類似の現象の経験のある方がいらっしゃいましたら、アドバイスをいただければ幸いです。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-09-21 16:40
単にポップアップブロックが働いてるんじゃねーの?
_________________
質問する前にググレカス
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-09-21 16:59
引用:

ひろさんの書き込み (2006-09-21 16:31) より:
問題が起きるクライアント端末は特定の物に限られているようですが、「常に開かない」のではなく、「開く場合もあれば開かない場合もある」という状態です。


引用:

ひろさんの書き込み (2006-09-21 16:31) より:
コード:
function OpenSubWin() {
	w = window.open("","mini","top=0,left=0,width=screen.width height=screen.height resizable=yes");
	w.document.location.href="/app/Popup/popup.jsp";
}




可能性のひとつですが、クライアントサイドのスクリプトでエラーになっているのではないでしょうか?IE だとウィンドウの左下に黄色いアイコンが出ていませんか?
OpenSubWin が呼ばれていることは確認されましたか?試しに OpenSubWin の入り口に alert でも入れて、それが表示されるかを調べてみてはどうでしょうか。

なお、スクリプトがエラーになる理由として、プログラムの間違い以外として良くあるのは、文字のエンコードが間違って解釈され、ダブルクォーテーションやシングルクォーテーションで囲まれた文字列が終端しない、というエラーです。まあ、これも可能性のひとつでしかありませんが。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2006-09-21 18:10
挙動としてはポップアップブロックが一番怪しいので、現場担当者に聞いた結果、

開かないことがある箇所は他にもあって、それらに共通しているのは

コード:
w = window.open("",ウィンドウ名,パラメータ);
w.document.location.href=URL;



として開いていると言う点で、window.open の最初の引数でURLを指定して開くものは
毎回正常に開くということがわかりました。

また、開かない場合でも XPのSP2のポップアップブロックのメッセージは出ないとのことです。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-09-21 18:15
>w.document.location.href=URL;
ブランクページが開かれた後でないと、documentができないから、とか。

w.location.href=URL;

ならどうなんでしょうか。
ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2006-09-21 18:43
コードを調べても、URLを空にしてウィンドウを開いてからページを遷移させなければならない特別な理由は見あたらない雰囲気です。

コード:
window.open(ポップアップのURL,タイトル,オプション設定)



に差し替えて動作テストをして問題がないなら、全部その様に書き換えようと思います。

# ノートンが入っているという追加情報が出てきたのでその線も調べてみます

ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2006-09-29 08:27
window.open の最初の引数の指定で回避出来たのでこれ以上の深追いはやめておきます。
ここまでにわかったことだけまとると、

現象
 window.openの最初の引数が空の文字列で、3つ目の引数にはwindow.openの引数として正しくない内容が含まれている場合に、ノートンがポップアップをブロックすることがある。

回避策(いずれか1つを実施すればOK)
 ・window.openの最初の引数でURLを指定する
 ・3つ目の引数に正しい内容をセットする
 ・a要素のtarget指定を使用する


[ メッセージ編集済み 編集者: ひろ@ya 編集日時 2006-10-02 10:43 ]
ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2006-10-02 14:42
なんか記事の追加投稿のつもりで1つ前の記事を上書きしてしまったみたいです。
間の経緯が抜けたのでもう少し追加報告しておきます
29日の投稿後に、幾つかのポップアップを開くパターンを用意したテスト用HTMLで実際に問題が起きている現場動作を確認してもらった結果、

・window.open の1つ目の引数が空でも3つ目の引数に誤りがなければポップアップは開く
・window.open の1つ目の引数でURLが指定されている方が処理が早い(操作した人にわかるだけの差があったようです)

という結果になりました。このテストの結果、
「window.openの1つ目の引数にURLを指定するようにポップアップを開く箇所を改造する」
という対応を取ることになりました。

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