0

フォームを含むページがあります。フォームは Javascript 呼び出しを介して送信され、「_blank」に設定されたターゲットを介して新しいウィンドウが開きます。

<div id="ajax_response_html">
    <form name="testform_name" id="testform_id" method="post" target="_blank" action="index.jsp" accept-charset="UTF-8" />
        <input type="hidden" name="textbox_name" id="textbox_id" value="test" />
    </form>
</div>

onclick イベントが発生すると、フォームは ajax 呼び出しを使用して上記の div 内に設定されます。その時点で、フォームを JavaScript で送信します。

 function setResponse() {
     var response = http.responseText;
     document.getElementById("ajax_response_html").innerHTML = response;
     document.getElementById("testform_id").submit(); 
 }

新しいウィンドウが開き、問題なく動作します。ただし、webview (アプリ内のブラウザー セッション) を使用するモバイル アプリがあり、新しいウィンドウが開きません。現時点では、アプリを制御することはできず、ソース コードにアクセスすることもできません。私の唯一の手段は、アプリ ユーザーと非アプリ ユーザーの両方を満足させるようにページを変更することです。前者の場合、同じウィンドウで開きます。後者の場合、新しいウィンドウが開きます。それが計画です。

私の思考プロセスは、新しいウィンドウが開いたかどうかを検出することです。そうでない場合は、同じウィンドウで開きます。

if (!windowOpen) {
    // Open page in the same window
}

フォームを送信した後に新しいウィンドウが開いたかどうかを検出するにはどうすればよいですか?

ありがとうございました。

アップデート

アプリの開発者に話を聞いたところ、ポップアップは無効になっており、すぐには変更されないとのことでした。

ajax 経由で html フォーム ファイルを呼び出す代わりに、JavaScript の window.open 関数を使用して同じファイルを開くようにページを変更しました。

function openForm() {
    var formWindow = window.open('FormFile.html', '_blank', 'height=' + screen.height + ', width=' + screen.width');
}

FormFile.html 内で、フォームを送信する onload イベントを添付しましたが、ターゲットは「_blank」ではなく「_self」に設定されています。

これで、アプリ内の同じウィンドウで開き、他の場所では新しいウィンドウが開きます。私の質問は、アプリ内でポップアップが無効になっているため、window.open が機能するのに、フォームを送信するために使用していた元の方法が失敗したのはなぜですか?

4

1 に答える 1

1

新しいウィンドウが開いたかどうかを確認するのではなく、ユーザーがアプリを使用しているかどうかを事前に確認し、それに基づいて動作を変更することをお勧めします。私は過去にscreen.widthプロパティをチェックすることでこれを達成しました(CSSでも同様に達成できます)が、よりきれいに行うことができます(この投稿の回答の礼儀):

if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
    // some code..
}

これは、ユーザーに起こったことに後で反応するのではなく、現在のウィンドウで開く必要があるか、新しいウィンドウで開く必要があるかを読み込み時に判断できるため、よりクリーンです。

于 2013-09-12T17:56:51.217 に答える