7

私のサイトには、非常に長い音声ファイルを再生するページへの新しいウィンドウを開くリンクがあります。私の現在のスクリプトは、リンクが複数回クリックされた場合、ページを開くのに問題なく動作し、更新されません。ただし、サイトの別のページに移動してこのリンクを再度クリックすると、再読み込みされます。親要素が変更されると、変数が失われるため、ウィンドウを開いて既存のコンテンツを上書きする必要があることを認識しています。私はその周りの解決策を見つけようとしています。これを実現するために Cookie を使用したくないのですが、必要に応じて使用します。

私のスクリプトは次のとおりです。

function OpenWindow(){
    if(typeof(winRef) == 'undefined' || winRef.closed){
    //create new
    winRef = window.open('http://samplesite/page','winPop','sampleListOfOptions');
    } else {
    //give it focus (in case it got burried)
     winRef.focus();
    } 
}
4

3 に答える 3

6

最初に URL なしで呼び出す必要がwinRef = window.open("", "winPopup")あります。これにより、ウィンドウが存在する場合は、リロードせずにウィンドウが返されます。winRefまたは空のウィンドウの場合にのみ、null新しいウィンドウを作成します。

ここに私のテストコードがあります:

var winRef;

function OpenWindow()
{
  if(typeof(winRef) == 'undefined' || winRef.closed)
  {
    //create new
    var url = 'http://someurl';
    winRef = window.open('', 'winPop', 'sampleListOfOptions');
    if(winRef == null || winRef.document.location.href != url)
    {
      winRef = window.open(url, 'winPop');
    }
  }
  else
  {
    //give it focus (in case it got burried)
    winRef.focus();
  } 
}

できます。

于 2012-11-16T10:15:38.023 に答える
2

スタンとhttp://ektaraval.blogspot.ca/2011/05/how-to-set-focus-to-child-window.htmlに感謝します

私のソリューションは、アクティブなサイト全体を維持し、リンクボタンをクリックする前にウィンドウが開いていない場合にのみ更新されるブレークアウトポップアップmp3プレーヤーを作成します

function OpenWindow(){
    var targetWin = window.open('','winPop', 'sample-options');
    if(targetWin.location == 'about:blank'){
        //create new
        targetWin.location.href = 'http://site/megaplayer';
        targetWin.focus();
    } else {
        //give it focus (in case it got burried)
        targetWin.focus();
    } 
}
于 2012-11-16T10:07:45.557 に答える
2

あなたが言ったように、元のページから移動した後、どのウィンドウを開いた可能性があるかを追跡できなくなります。

私が知る限り、その特定のウィンドウへの参照を「取り戻す」方法はありません。(Cookie、サーバー側セッションなどを使用して)ウィンドウがすでに開かれていることを知っているかもしれませんが、別のページから直接アクセスすることはできません(同じドメイン上であっても)。すでに開いているウィンドウ間のこの種の通信は、2 つのウィンドウ間で情報を共有するときにエージェントとして機能する ajax とサーバー側コードを使用してシミュレートできます。ただし、これは簡単でもクリーンなソリューションでもありません。

于 2012-11-16T08:45:41.740 に答える