android標準ブラウザのwindow.openの挙動

5,933 views
Skip to first unread message

linesnova

unread,
Mar 24, 2011, 11:21:20 PM3/24/11
to 日本Androidの会
はじめて投稿させていただきます。linesnovaといいます。

window.openを実行時、android標準ブラウザの挙動として以下の2パターンがあります。
①別ウィンドウが立ち上がる
②ポップアップのような画面が立ち上がる

検証したのが xperia (android 2.1) と HTC Desire(android 2.2)です。
以下のソースで(openXX(pop))と記載しているのはxperiaの検証結果でポップアップのような画面が立ち上がったもの
を示してます。
HTC Desireでは、window.openの第3引数を指定したものはすべて、ポップアップのような画面が立ち上がります。

ここでお伺いしたいのですが、これらの挙動が違うのはバグの修正といったものなのでしょうか?
この挙動や仕様について詳しい方がいらっしゃいましたら、ご教授願えますでしょうか?

↓↓↓↓↓↓↓↓ソース ここから↓↓↓↓↓↓↓↓↓
<html>

<head>
<title>window.open - ウィンドウを開く</title>
</head>

<body>

<!--ウィンドウを開くのサンプル-->
<script type="text/javascript">
var win1,win2,win3;
function open1() {
win1 = window.open("http://www.yahoo.co.jp", "yahoo");
}
function open2() {
win2 = window.open("http://www.yahoo.com", "yahoocom",
"width=500,height=500,scrollbars=no,resizable=yes");
/*
第三引数には他に次の値も指定可能
width=400 ウィンドウの幅
height=200 ウィンドウの高さ
status=yes|no ステータスバーの表示
scrollbars=yes|no スクロールバーの表示
directories=yes|no ユーザツールバーの表示
menubar=yes|no メニューバーの表示
resizable=yes|no リサイズ可能かどうか
toolbar=yes|no ツールバーの表示
*/
}
function close1() {
if (win1 != null && win1 != undefined) {
win1.close();
}
}
function close2() {
if (win2 != null && win2 != undefined) {
win2.close();
}
}
function open3() {
win3 = window.open("http://www.yahoo.co.jp", "_blank");
}
function open4() {
win4 = window.open("http://www.yahoo.co.jp", "");
}
function open5() {
win5 = window.open("http://www.yahoo.co.jp");
}
function open6() {
win6 = window.open("http://www.yahoo.co.jp",'_blank');
}
function open8(){
window.open('http://www.yahoo.co.jp','sub','width=640,height=640');
return false;
}
function open9(){
window.open('http://www.yahoo.co.jp','hoge','width=640,height=640');
return false;
}
function open10(){
window.open('http://
www.yahoo.co.jp','hoge','width=640,height=640,scrollbars=yes,resizable=yes');
return false;
}
function open11(){
window.open('http://
www.yahoo.co.jp','hoge','width=640,height=640,scrollbars=no,resizable=yes');
return false;
}
function open12(){
window.open('http://
www.yahoo.co.jp','hoge','width=640,height=640,scrollbars=yes,resizable=no');
return false;
}
function open13(){
window.open('http://
www.yahoo.co.jp','hoge','width=640,height=640,scrollbars=no,resizable=yes,location=yes');
return false;
}
function open14(){
window.open('http://
www.yahoo.co.jp','hoge','width=640,height=640,scrollbars=no,resizable=yes,location=yes,status=yes');
return false;
}
function open15(){
window.open('http://www.yahoo.co.jp','hoge','');
return false;
}
</script>
<input type="button" value="open1" onclick="open1()"/><br>
<input type="button" value="open2" onclick="open2()"/><br>
<input type="button" value="open3" onclick="open3()"/><br>
<input type="button" value="open4" onclick="open4()"/><br>
<input type="button" value="open5" onclick="open5()"/><br>
<input type="button" value="open6" onclick="open6()"/><br>
<input type="button" value="open7(pop)" onclick="window.open('http://
www.yahoo.co.jp','sub','width=640,height=640');return false;"><br/>
<input type="button" value="open8(pop)" onclick="open8()"/><br>
<input type="button" value="open9(pop)" onclick="open9()"/><br>
<input type="button" value="open10" onclick="open10()"/><br>
<input type="button" value="open11(pop)" onclick="open11()"/><br>
<input type="button" value="open12" onclick="open12()"/><br>
<input type="button" value="open13" onclick="open13()"/><br>
<input type="button" value="open14" onclick="open14()"/><br>
<input type="button" value="open15" onclick="open15()"/><br>
<hr>
<button onclick="close1()">close1</button><br>
<button onclick="close2()">close2</button><br>

</body>
</html>
↑↑↑↑↑↑↑↑ソース ここから↑↑↑↑↑↑↑↑↑

narichang

unread,
Mar 31, 2011, 3:09:57 AM3/31/11
to 日本Androidの会
setTimeoutの第一匹数へwindow.openをかませると、正しい動作を行うようです。

★サンプル
setTimeout(function() { window.open(“http://example.com”) }, 100);

Androidブラウザの動作チェック時に同じようなことをしていましたが
どうやら、「window.open」実行前にAndroidブラウザとしてはポップアップを
許可するか不許可にするかのwindow.confirm的なことを実行したいようです。

このためsetTimeoutで実行時間差をつけてあげると意図した動きになるようです。

Galaxy Sでは、setTimeoutをつけないとバックグラウンドで新規ウインドウが開いて
画面自体は既存のページにフォーカスした状態になります。

個人的に思ったことですが、Androidブラウザの仕様上のバグなのではないでしょうか。

Reply all
Reply to author
Forward
Message has been deleted
0 new messages