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

StackOverflow https://stackoverflow.com/questions/3681178

  •  02-10-2019
  •  | 
  •  

質問

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

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

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

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

何か案は?

役に立ちましたか?

解決

はい、私はこれを非難することができます - 興味深い。 setTimeout その周りに動作します:

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

ウィンドウが閉じた後(ハイパーリンクが続く前に発生する)、Firefoxがそのページの処理を停止することしか推測できません。

編集:10msの遅延にする方がいい - 1MS Chromeがウィンドウを閉じていない。

他のヒント

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

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

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

}

または、これはPPAGEが新しいタブで開く必要がある場合:

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top