Window.open with' noopener'打开一个新窗口而不是新选项卡

时间:2018-03-14 11:26:20

标签: javascript window.open window.opener

我使用03-14 16:33:47.407 26479-26479/com.ivis.live E/AndroidRuntime: FATAL EXCEPTION: main Process: com.ivis.live, PID: 26479 java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Context.getColor(int)' on a null object reference at android.support.v4.content.ContextCompat.getColor(ContextCompat.java:409) at com.ivigil.ivis.fragments.CurrentFragment$1.onResponse(CurrentFragment.java:285) at com.ivigil.ivis.fragments.CurrentFragment$1.onResponse(CurrentFragment.java:222) at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:83) at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:106) at android.os.Handler.handleCallback(Handler.java:789) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) window.open('')作为第二个参数在新标签中打开我的链接。例如。 '_blank'

但是,最近我添加了第三个参数window.open('http://google.com', '_blank'),以便'noopener'在新选项卡中变为空,并且新选项卡无法访问父选项卡/窗口。即window.openerwindow.opener

null

所以上面的代码解决了安全问题,但是没有打开新选项卡,而是打开了一个新窗口,这不是我的预期。我的浏览器设置相同,未对其进行任何更改。

我能做些什么来让这个代码打开新标签而不是新窗口?我不想删除window.open('http://google.com', '_blank', 'noopener')作为第三个参数

4 个答案:

答案 0 :(得分:8)

可以在一行中解决此问题的另一种方法是直接访问opener属性并将其设置为null,以利用window.open()返回Window对象的事实。这将适用于所有浏览器,以使用空window.opener打开一个新标签页。

window.open(url, '_blank').opener = null;

答案 1 :(得分:6)

老实说,我认为您的代码很好,但您可以尝试不同的实现:

var yourWindow = window.open();
yourWindow.opener = null;
yourWindow.location = "http://someurl.here";
yourWindow.target = "_blank";

答案 2 :(得分:3)

这是我唯一适用于跨浏览器(IE11,Chrome 66,FF 60,Safari 11.1)的东西



static




答案 3 :(得分:2)

const anchor = document.createElement('a');

Object.assign(anchor, {
        target: '_blank',
        href: 'http://google.com',
        rel: 'noopener noreferrer'
      })
      .click()

这是我最近使用的方法,它创建了一个锚标记并点击它,我们必须使用此变通方法作为用户首选项。

https://mathiasbynens.github.io/rel-noopener/