0

私たちは JavaScript を使用して Web アプリケーションを開発しています。ユーザーのデフォルトのブラウザとして Chrome を使用しています。アプリケーションで window.open を使用すると、問題が発生しました。

私たちのアプリケーションでは、新しいブラウザー タブで新しいページを開く必要があります。コードを使用しました: window.open(' http://ourUrl.com ', '_blank') in js code;

このコード行が実行されるタイミングによって、ブラウザの動作が異なります。

状況 1: ユーザーがボタンをクリックすると、クリック イベントが js 関数をトリガーし、この関数でこのコード行を直接実行すると、ブラウザーは新しいブラウザー タブでページを開く場合があります。(これが私たちの望みです。)

状況 2: ユーザーがボタンをクリックし、ボタンのクリック イベントのハンドラーで、最初にページ上のデータを ajax 経由でサーバーに送信し、コールバック関数でこのコード行を実行すると、独立した新しいウィンドウが表示される場合があります。ブラウザ タブの代わりにツールバーがありません (これは私たちが望んでいるものではありません)。

ブラウザの動作が異なる理由がわかりません。誰か説明してもらえますか?

ありがとう。

4

1 に答える 1

0

この質問で説明したように、URL を (新しいウィンドウではなく) 新しいタブで開くには、window.open関数をユーザー生成アクション コールバックのスコープ内 (たとえば、のスコープ内) で呼び出す必要があります。onClick )
その他のシナリオでは、URL は新しいウィンドウで開かれます。


状況 1:ユーザーが生成したアクションのコールバックで window.openが呼び出されます。そのため、新しいタブで開きます。
状況 2:この状況では、window.open関数が ajax 応答コールバックのスコープで呼び出されます。これは、ユーザー生成アクションの (コンテキスト外の) 別のスコープです。

(ウィンドウの代わりに) 新しいタブを開く 2 番目のシナリオでは、 window.openを、別のアクション (ajax 応答) のコールバックとしてではなく、ユーザーがクリックした直後に同期的に呼び出す必要があります。

于 2013-05-26T09:16:01.927 に答える