window.open('')
と_'_blank'
_を2番目のパラメーターとして使用して、新しいタブでリンクを開きました。 window.open('http://google.com', '_blank')
しかし、最近、3番目のパラメーター_'noopener'
_を追加して、新しいタブで_window.opener
_がnullになり、新しいタブが親タブ/ウィンドウにアクセスできないようにしました。つまり、_window.opener
_はnull
です
window.open('http://google.com', '_blank', 'noopener')
したがって、上記のコードはセキュリティの問題を解決しましたが、新しいタブを開く代わりに、新しいウィンドウが開き始めました。これは私が期待したものではありません。私のブラウザの設定は同じで、変更はありませんでした。
このコードを新しいウィンドウではなく新しいタブで開くためにできることはありますか? 3番目のパラメータとしてnoopener
を削除したくない
正直なところ、コードは問題ないと思いますが、別の実装を試すことができます。
var yourWindow = window.open();
yourWindow.opener = null;
yourWindow.location = "http://someurl.here";
yourWindow.target = "_blank";
これを1行で解決する別のアプローチは、オープナープロパティに直接アクセスし、それをnullに設定して、window.open()
がWindow
オブジェクトを返すという事実を利用することです。これはすべてのブラウザで機能し、null window.opener
で新しいタブを開きます。
window.open(url, '_blank').opener = null;
const anchor = document.createElement('a');
Object.assign(anchor, {
target: '_blank',
href: 'http://google.com',
rel: 'noopener noreferrer'
})
.click()
これは少しすっきりした感じの方法です。アンカータグを作成してクリックします。この回避策をユーザー設定として使用する必要があります。
これは私にとってクロスブラウザ(IE11、Chrome 66、FF 60、Safari 11.1)で動作する唯一のものです
function openURL(url) {
var link = document.createElement('a');
link.target = "_blank";
link.href = url;
link.rel = "noopener noreferrer";
document.body.appendChild(link); // you need to add it to the DOM to get FF working
link.click();
link.parentNode.removeChild(link); // link.remove(); doesn't work on IE11
};