web-dev-qa-db-ja.com

新しいウィンドウを開き、現在のウィンドウを閉じるためのHtml javascript

ポップアップウィンドウがあり、そのページの本文に次のコードがあります。

<a href="http://www.example.com" target="_blank" onClick="javascript:window.close()"><img src="...something"/></a>

目的は、ユーザーが画像リンクをクリックしたときにこのポップアップウィンドウを閉じ、新しいページを開いてhttp://www.example.com)に移動することです。

IEおよびChromeでは機能しますが、Firefoxでは機能しません。ポップアップウィンドウは閉じますが、新しいウィンドウは開きません。

何か案は?

9
Eatdoku

はい、これを再現できます-興味深いです。 setTimeoutはそれを回避します:

onClick="javascript: setTimeout(window.close, 10);"

ウィンドウが閉じると(ハイパーリンクがたどられる前に発生します)、Firefoxはそのページの処理を停止すると推測できます。

編集:10msの遅延にする方が良い-1msでChromeはウィンドウを閉じません。

14
EMP

質問は実際にはオープナーで解決されましたが、それは私の問題を助けませんでした(望まれていません:Firefoxの下の新しいウィンドウは現在のポップアップと同じサイズを保ちます)。

だから私は次の解決策を見つけます:

function whenClicked() 
{
    window.close();
    opener.location.href = "http://www.example.com";

}

または、ppageを新しいタブで開く必要がある場合は、次のようにします。

function whenClicked() 
{
    window.close();
    opener.open(http://www.example.com, '_blank');
}
3
Samsky

Javascriptを介して要素のクリックイベントに機能を追加すると、デフォルトのイベントをインターセプトしてオーバーライドできるようにするために、その機能はデフォルトのクリックイベント(この場合は新しいページを開く)の前に実行されます。デフォルトの動作は、イベントがブール値trueを返した場合にのみ実行されます。

この場合、追加機能はウィンドウを閉じることであり、Firefoxはこれを「これですべて完了」と解釈することを選択するため、クリックイベントがtrueを返すことはなく、新しいページが開かれることはありません。

短いタイムアウトを使用するというEvgenyの提案では、ウィンドウが閉じる前にクリックイベントがtrueを返すことができるため、新しいウィンドウを開くことができます。

2
Ender