web-dev-qa-db-ja.com

window.opener.location.hrefはIEで機能しますが、ChromeまたはSafariでは機能しません

私はこの問題を調査しており、同様の問題についてさまざまなフォーラムに多くの投稿がありますが、問題や解決策のどれも私のものと完全に一致するものはありません。

ポップアップが終了したら、以下の関数を使用して親ウィンドウにリダイレクトすることに成功したアプリケーションがあります。最近、他のブラウザとの互換性を調査していて(iPad経由でシステムを使用できるようにするため)、SafariまたはChromeを使用しているときにこの機能に問題があることがわかりました。

親ページはデータベース化された情報の要約であり、ユーザーはリンクをクリックしてウィンドウを開き(window.open経由)、より詳細なデータを表示します。終了すると、子ウィンドウにリンクがあり、親のデータを更新して(一部、親に戻ったときに正しいデータが表示されるようにするため)、子を閉じます。

Safariのコンソールは、「 'window.opener.location.href'の結果は関数ではありません」と報告します。上記と「window.opener.document.location.href」および「window.opener.window.location.href」(ネット上で提供されている他のソリューションから取得)を使用しようとしましたが、成功しませんでした。

この機能がうまく機能している人もいれば、この種の問題を抱えている人もいることを私は知っています。この特定の状況に対する答えはあるのだろうかと思います。

これが私の機能です:

function quicklink(url) {
window.opener.document.location.href(url);
self.close();
}

これは、IE7、8、および9で初日から機能しましたが、Safari(WindowsまたはiPadの場合)またはChromeでは機能しません。

何か案は?

6
Barbs

hrefはプロパティであり、メソッドではありません。 URLを割り当てるだけです。

window.opener.document.location.href = url;

これはIEでも機能します。メソッドとして使用できる場合でも、そこのプロパティでもあります。

20
Guffa

以下のコードを使用して、目的の結果を達成します。

親:

<script language="javascript">

function open_a_window() 
{
    var w = 200;
        var h = 200;
        var left = Number((screen.width/2)-(w/2));
        var tops = Number((screen.height/2)-(h/2));

        window.open("window_to_close.html", '', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+tops+', left='+left);

   return false;
}

// opener:
window.onmessage = function (e) {
  if (e.data === 'location') {
    window.location.replace('https://www.google.com');
  }
};

</script>

<input type="button" onclick="return open_a_window();" value="Open New Window/Tab" />

現れる:

<!DOCTYPE html>
<html>
<body onload="quitBox('quit');">

<h1>The window closer:</h1>

<input type="button" onclick="return quitBox('quit');" value="Close This Window/Tab" /> 


<script language="javascript">

function quitBox(cmd) 
{      
    if (cmd=='quit')    
    {   
       window.opener.postMessage('location', '*');
       window.open(location, '_self').close();    
    }     
    return false;   
}

</script>

</body>
</html>
0
Harshal Lonare